o
    iE`                     @   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dtypeZ	alignmentr   Z__array_interface__hasattrshaper   flagsc_contiguoussizef_contiguous
ValueError)r-   r+   orderr$   err_msgx r6   U/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/_lib/tests/test__util.pycheck   s$   

z"test__aligned_zeros.<locals>.check)	                      @   N)r   r9   r;      )r'   r(   Nr9   r:   r;   )r*   uint8float64range)Zniterr8   r$   nr3   r+   r-   jr6   r6   r7   test__aligned_zeros   s   rG   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 )Nr9   a)
r   r   typer*   randomRandomStateassert_raisesr2   	GeneratorZPCG64)ZrsiZrgr6   r6   r7   test_check_random_state>   s   rN   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 )Nr9   pool)r9   funciterablec                   @   s   e Zd ZdddddZdS )z0test_getfullargspec_no_self.<locals>._rv_genericr:   r;   Nr0   c                _   s   d S Nr6   )selfrH   bcr0   argskwargsr6   r6   r7   _rvsY   s   z5test_getfullargspec_no_self.<locals>._rv_generic._rvsr:   r;   )__name__
__module____qualname__rY   r6   r6   r6   r7   _rv_genericX   s    r^   )rH   rU   rV   rW   rX   rZ   r0   )r   r   __init__r   r   __call__rY   )pZargspecr^   Zrv_objr6   r6   r7   test_getfullargspec_no_selfO   s   



rb   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      $@r9   Fr   )r*   arangesinr   r   _mapfuncmaprO   	_own_poollistr   rL   RuntimeError)in_argout_argra   outr6   r6   r7   test_mapwrapper_serialb   s   




"rn   c                  C   s@   t d} | tjg d W d    d S 1 sw   Y  d S )Nr:   )r9   r:   r;   r<   )r   rg   mathre   )ra   r6   r6   r7   	test_poolq   s   
"rp   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 )Nrc   r:   TF)r*   rd   re   r   r   ri   r   rh   
isinstancerO   PWLrf   rL   	ExceptionrI   r2   r   rg   close)rk   rl   ra   rm   excinfoqr6   r6   r7   test_mapwrapper_parallelv   s(   






"rw   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highr0   endpoint)ry   )rz   r0   r|   r   Fr<   )	r*   rJ   rK   r   maxminr-   default_rngAttributeError)rngZarrr6   r6   r7   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 )TestValidateIntrE   r<   c                 C   s   t |d}|dksJ d S )NrE   r<   )r   rT   rE   r6   r6   r7   test_validate_int   s   
z!TestValidateInt.test_validate_intg      @r9   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matchrE   )pytestr   	TypeErrorr   r   r6   r6   r7   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   rE   r   )r   r   r2   r   )rT   r6   r6   r7   test_validate_int_below_min   s   "z+TestValidateInt.test_validate_int_below_minN)r[   r\   r]   r   markparametrizer*   rB   Zint16arrayr   r   r   r   r6   r6   r6   r7   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 rS   r6   rT   r   r6   r6   r7   old_keyword_still_accepted      z.TestRenameParameter.old_keyword_still_acceptedz1.9.0)dep_versionc                 C   r   rS   r6   r   r6   r6   r7   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   Z
unexpectedz)old_keyword_still_accepted() got multipler   r   )r   reescaper   r   r   )rT   res1res2res3messager6   r6   r7   test_old_keyword_still_accepted   s$   
&

"z3TestRenameParameter.test_old_keyword_still_acceptedc                 C   s   ddl m} | S )Nr   )Lock)	threadingr   )rT   r   r6   r6   r7   
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   ZwarnsDeprecationWarningr   r   r   r   )rT   r   Zdep_msgr   r   r   r   r6   r6   r7   test_old_keyword_deprecated
  sN   
&

   $z/TestRenameParameter.test_old_keyword_deprecatedN)r[   r\   r]   r   r   r   r   r   Zfixturer   r   r6   r6   r6   r7   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 )Nr9   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   r2   )rT   r%   contains_nanr   msgr6   r6   r7   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)r9   r:   r;   r   r9   r:   r;   r<   )r*   r   r   r   )rT   data1data2data3data4Zdata5r6   r6   r7   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 )	Nr9   r:   3r   object)r+   1r;   )r*   r   r   r   )rT   r   r   r   r   r6   r6   r7   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<   rR   )xp)r9   r:   r9   r   r   zThe input contains...r   r   z%`nan_policy='omit' is incompatible...r   )r*   rJ   r   asarrayr   r   r   r   r   r2   r   )
rT   r   r   r   Zx0r5   Zx_nanr   Znan_policy_outr   r6   r6   r7   test_array_api^  s4   

""
z"TestContainsNaNTest.test_array_apiN)r[   r\   r]   r   r   r   r   r   r   r   usefixturesr
   r   r   r6   r6   r6   r7   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 r6   )linesr6   r6   r7   mock_str~  s   z(test__rng_html_rewrite.<locals>.mock_str)np.random.default_rng()r   r   r   )r   )r   resrefr6   r6   r7   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;   rR   r;   r*   rJ   r   r   Zvqkmeans2rT   rX   r   r6   r6   r7   kmeans     zTestTransitionToRNG.kmeansc                 K   r   r   r   r   r6   r6   r7   r     r   zTestTransitionToRNG.kmeans2c                 K   s8   t jd}|d\}}}tj||fi |}||S )Nr   )r;   r#   )r*   rJ   r   r   ZBarycentricInterpolator)rT   rX   r   x1Zx2y1fr6   r6   r7   barycentric  s   zTestTransitionToRNG.barycentricc                 K   s&   t jd}tj|ddfi |S )Nr   r#   r#   r;   )r*   rJ   r   r   clarkson_woodruff_transformr   r6   r6   r7   r     s   z/TestTransitionToRNG.clarkson_woodruff_transformc                 K   s*   t jd}tjtj|dfi |jS )Nr   r;   )r*   rJ   r   r   basinhoppingrosenr5   r   r6   r6   r7   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*   rJ   r   r   ZBoundsr   r5   )rT   ZfunrX   r   Zboundsr6   r6   r7   opt  s   "zTestTransitionToRNG.optc                 K      | j tjfi |S rS   )r   r   differential_evolutionrT   rX   r6   r6   r7   r        z*TestTransitionToRNG.differential_evolutionc                 K   r   rS   )r   r   dual_annealingr   r6   r6   r7   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;   	directionrJ   )r*   rJ   r   r   
check_gradr   Z	rosen_der)rT   rX   r   r5   r6   r6   r7   r     s   
zTestTransitionToRNG.check_gradc                 K      t jdddi| S )Nr   density      ?)r   )r    random_arraytoarrayr   r6   r6   r7   r        z TestTransitionToRNG.random_arrayc                 K   r   Nr#   r   r   r   )r    rJ   r   r   r6   r6   r7   rJ     r   zTestTransitionToRNG.randomc                 K   r   r   )r    randr   r   r6   r6   r7   r     r   zTestTransitionToRNG.randc                 K   s*   t jd}|d}tjj|fi |S )Nr   r   )r*   rJ   r   r    r   svds)rT   rX   r   Ar6   r6   r7   r     s   
zTestTransitionToRNG.svdsc                 K   s   t jjjdi | S )Nr;   )r;   )r!   	transformZRotationrJ   Z	as_matrixr   r6   r6   r7   random_rotation  r   z#TestTransitionToRNG.random_rotationc                 K   s.   t jd}|d}tjtj|fi |jS Nr   ry   )r*   rJ   r   r"   goodness_of_fitZlaplacepvaluerT   rX   r   r%   r6   r6   r7   r     s   
z#TestTransitionToRNG.goodness_of_fitc                 K   s8   t jd}t|d}dd }tj||fi |jS )Nr   r:   ry   c                 S   s   t j| |dt j||d S )N)axis)r*   mean)r5   yr   r6   r6   r7   	statistic  s    z7TestTransitionToRNG.permutation_test.<locals>.statistic)r*   rJ   r   tupler"   permutation_testr   )rT   rX   r   r%   r   r6   r6   r7   r     s   z$TestTransitionToRNG.permutation_testc                 K   s0   t jd}|df}tj|t jfi |jS r   )r*   rJ   r   r"   	bootstrapr   confidence_intervalr   r6   r6   r7   r     s   zTestTransitionToRNG.bootstrapc                 K   s6   t jd}|d\}}}tj||fd|i|jS )Nr   )r;   ry   control)r*   rJ   r   r"   dunnettr   )rT   rX   r   r5   r   r   r6   r6   r7   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      r9   r:   g?r<   )r*   re   )r5   r6   r6   r7   
f_ishigami  s   " z5TestTransitionToRNG.sobol_indices.<locals>.f_ishigamir:   )locscalei   )rP   rE   distsr6   )r"   uniformr*   pisobol_indicesZfirst_order)rT   rX   r  r  r   r6   r6   r7   r	    s   z!TestTransitionToRNG.sobol_indicesc                 K   s   |dddi|}| dS )Ndr9   r<   r6   )rJ   )rT   ZenginerX   Zqrngr6   r6   r7   
qmc_engine  s   
zTestTransitionToRNG.qmc_enginec                 K      | j tjjfi |S rS   )r  r"   qmcZHaltonr   r6   r6   r7   halton     zTestTransitionToRNG.haltonc                 K   r  rS   )r  r"   r  ZSobolr   r6   r6   r7   sobol  r  zTestTransitionToRNG.sobolc                 K   r  rS   )r  r"   r  ZLatinHypercuber   r6   r6   r7   latin_hypercube  r  z#TestTransitionToRNG.latin_hypercubec                 K   r  rS   )r  r"   r  ZPoissonDiskr   r6   r6   r7   poisson_disk  r  z TestTransitionToRNG.poisson_diskc                 K   s    t jjdgfi |}|dS )Nr   r<   )r"   r  ZMultivariateNormalQMCrJ   rT   rX   Xr6   r6   r7   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  ZMultinomialQMCrJ   r  r6   r6   r7   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   methodr6   )r*   rJ   r   r   r"   ZPermutationMethodpearsonrr   )rT   rX   r   r%   r  r6   r6   r7   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  r6   )r*   rJ   r   r   r"   r  ZBootstrapMethodr   )rT   rX   r   r%   r   r  r6   r6   r7   bootstrap_method  s
   
z$TestTransitionToRNG.bootstrap_methodr#   zmethod, arg_nameseedZ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	  >   r  r  r  r  r  r  )
r*   rJ   r  r   r   r   r   r   r[   rK   )rT   r  Zarg_namer  r   r   r   r   r   Zres1bZres2br6   r6   r7   test_rng_deterministic  s8   






z*TestTransitionToRNG.test_rng_deterministicN)%r[   r\   r]   r   r   r   r   r   r   r   r   r   r   rJ   r   r   r   r   r   r   r  r	  r  r  r  r  r  r  r  r  r  r   r   	fail_slowslowr   r  r6   r6   r6   r7   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 )TestLazywherer9   r;   )Z	min_valueZ	max_valuei ʚ;l   c(	 r   r#   zignore::RuntimeWarningr   r   r   r   )n_arraysrng_seedr+   ra   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 )Nr9   r   )Z
num_shapesZmin_sideZallow_subnormalF)r+   r-   elementsc              
      s&   g | ]}  tj|d qS ))r+   r-   )r   drawnpstarrays).0r-   r%   r+   r   r6   r7   
<listcomp>l  s    z,TestLazywhere.test_basic.<locals>.<listcomp>c                  W   s   t dd | D S )Nc                 s       | ]}|V  qd S rS   r6   r&  argr6   r6   r7   	<genexpr>p      z6TestLazywhere.test_basic.<locals>.f.<locals>.<genexpr>sumrW   r6   r6   r7   r   o  s   z#TestLazywhere.test_basic.<locals>.fc                  W   s   t dd | D d S )Nc                 s   r)  rS   r6   r*  r6   r6   r7   r,  s  r-  z7TestLazywhere.test_basic.<locals>.f2.<locals>.<genexpr>r:   r.  r0  r6   r6   r7   f2r  r  z$TestLazywhere.test_basic.<locals>.f2rR   )r1  gؗҬ<)Zrtol)r$  Zmutually_broadcastable_shapesr#  r   r%  r   floatr*   rJ   r   r   r   Z
atleast_1dwhereZreshaper   r   )rT   r   r!  r+   ra   r%   r   ZmbsZinput_shapesZresult_shapeZ
cond_shapeZshapesr"  	fillvalueZfloat_fillvaluer%  r   r1  r   Zcondr   r   r   Zref1Zref2Zref3r6   r'  r7   
test_basic[  sH   
	




zTestLazywhere.test_basicN)r[   r\   r]   r   Zintegersr   r!  Zsampled_fromr*   Zfloat32rC   r+   Zfloatsra   r%   r   r   r  filterwarningsr   r   r
   r   Zthread_unsafer5  r6   r6   r6   r7   r  T  s     


r  )Dmultiprocessingr   Zmultiprocessing.poolrr   r   ro   	fractionsr   numpyr*   Znumpy.testingr   r   r   r   rL   Zhypothesis.extra.numpyextrar$  Z
hypothesisr   r   r	   Zscipy.conftestr
   r   Zscipy._lib._array_apir   r   r   r   r   Zscipy._lib._utilr   r   r   r   r   r   r   r   r   r   r   Zscipyr   r   r   r   r    r!   r"   r   r   r  rG   rN   rb   rn   rp   rw   r   r   r   r   r   r   r  r6   r6   r6   r7   <module>   s>    4$
# :IR C