
    Џkh@!                         d dl Z d dlZd dlmZ d dlmZmZmZm	Z	 d dl
mZmZ d dlmZ e j                  j                   Z edd      d        Zd	 Z ed
d       edd       G d d                    Zy)    N)stats)xp_default_dtypeis_numpyis_torchSCIPY_ARRAY_API)xp_assert_closexp_assert_equal)_apply_over_batch)x   )pr   c                    |dk(  r| t        j                  |           } t        j                  |      }|j                         }d||<   |dk(  r| j                  dk(  rt        j                  || d         n)t
        j                  j                  | |      j                  }|dk(  rRt        j                  t        j                  |             r*t         j                  |d d  nt        j                  | |      }t         j                  ||<   |S )Nomit      ?harrell-davisr   r   	propagate)npisnancopysize	full_liker   mstatshdquantilesdataanynanquantile)r   r   
nan_policymethodp_maskress         [/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/stats/tests/test_quantile.pyquantile_reference_last_axisr#      s    Vrxx{lOXXa[F	AAfI ()!r||Aqt$LL,,Q277 	$)<VVCFkk!Q&&CKJ    c                    t        j                  | |d      t        j                  ||d      }} t        | |||      }t        j                  |d|      }|st        j                  ||      }|S )Naxis)r   moveaxisr#   squeeze)r   r   r(   r   keepdimsr   r!   s          r"   quantile_referencer,      s_    ;;q$#R[[D"%=qA
&q!Z
@C
++c2t
$Cjj4(Jr$   z
dask.arrayzNo take_along_axis yet.)reasonz	jax.numpyzNo mutation.c                   p   e Zd Zd Zej
                  j                  dg d      ej
                  j                  dg d      d               Z edd	      ej
                  j                  d
ddg      ej
                  j                  dddg      ej
                  j                  dg d      ej
                  j                  dddg      ej
                  j                  dddg      d                                           Z	d Z
ej
                  j                  dg dej                  i fg dddddej                  gej                  ddej                  ej                  gi fg dg g i fej                  dggdej                  dgddifg g gd ej                  dej                        d
difg g gd ej                  d       ddd!fg g gd ej                  d"      ddd!fg dd#g ej                  dej                        i f ej                  dd$      j!                  d%      dd&gggd'dd!fddgdd(ggg d)g d*gd'dd!fg
      d+        Zej
                  j                  d
g d,      ej
                  j                  dddg      d-               Zej
                  j                  dg d.      d/        Zy')0TestQuantilec                    |j                  g d      }|j                  d      }d}t        j                  t        |      5  t	        j
                  |j                  ddg      |       d d d        t        j                  t              5  t	        j
                  |j                  ddg      |       d d d        d	}t        j                  t        |      5  t	        j
                  ||j                  d
dg             d d d        d}t        j                  t        |      5  t	        j
                  ||d       d d d        t        j                  t        |      5  t	        j
                  ||d       d d d        d}t        j                  t        |      5  t	        j
                  ||d       d d d        d}t        j                  t        |      5  t	        j
                  |j                  |j                  ddg      |d       d d d        d}t        j                  t        |      5  t	        j
                  ||d       d d d        d}t        j                  t        |      5  t	        j
                  ||d       d d d        d}t        j                  t        |      5  t	        j
                  ||j                  ddg      d       d d d        y # 1 sw Y   ~xY w# 1 sw Y   Bx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   qx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   y xY w)Nr         r   z`x` must have real dtype.)matchTFy      ?      ?r2   z"`p` must have real floating dtype.r   r   z"`axis` must be an integer or None.r'   )r   r&   z7`axis` is not compatible with the shapes of the inputs.zThe input contains nan valuesraise)r   zmethod` must be one of...za duckr   z/If specified, `keepdims` must be True or False.*   )r+   zD`keepdims` may be False only if the length of `p` along `axis` is 1.333333?)asarraypytestraises
ValueErrorr   r   r   )selfxpr   r   messages        r"   test_input_validationz"TestQuantile.test_input_validation,   s   JJy!JJsO-]]:W5 	9NN2::tUm4a8	9]]:& 	5NN2::tQi0!4	5 7]]:W5 	2NN1bjj!Q01	2 7]]:W5 	+NN1ac*	+]]:W5 	/NN1ag.	/ L]]:W5 	)NN1aa(	) 2]]:W5 	NNN2::rvvq!n5qWM	N .]]:W5 	2NN1a1	2 D]]:W5 	.NN1a"-	. Y]]:W5 	FNN1bjj#s4uE	F 	FA	9 	9	5 	5	2 	2	+ 	+	/ 	/	) 	)	N 	N	2 	2	. 	.	F 	Fsx   (K&(K3(L %L!LL'5L47M5M3*M&K03K= L
LL$'L14L>M
MM"r   )	inverted_cdfaveraged_inverted_cdfclosest_observationhazeninterpolated_inverted_cdflinearmedian_unbiasednormal_unbiasedweibullzshape_x, shape_p, axis))
   Nr&   )rJ   rJ   r&   )rJ   )r2   r3   r&   )rJ   r2   Nr   rK   c                    t        |      }t        j                  j                  d      }|j                  |      }|j                  |      }	t        j                  ||	||      }
|j                  ||      |j                  |	|      }	}t        j                  ||	||      }t        ||j                  |
|             y )N   lv_r   )r   r(   dtype)r   r   randomdefault_rngr   r9   r   r   )r=   r   shape_xshape_pr(   r>   rP   rngr   r   refr!   s               r"   test_against_numpyzTestQuantile.test_against_numpyT   s     !$ii##$56JJGJ$JJGJ$kk!QvD9zz!5z)2::au:+E1nnQ&t<RZZ5Z9:r$   TzPyTorch doesn't have `betainc`.)cpu_onlyr-   r(   r   r   r+   Fr   )r   r   marrayrP   float32float64rF   r   c                    t         j                  j                  d      }d}|j                  |      j                  |      }	|j                  |      j                  |      }
|j                  |      dkD  }t        j                  |      sJ t         j
                  |	|<   |st        j                  |
|d      }
t        |      r|
j                         }d|d<   d	|d
<   t        ||      }|dk(  r|dk(  rt        j                  d       t        |      rt        j                  d       t        st        j                  d       t        j                  d      }t        |||      }|j!                  |      }|j#                  |	|      }t%        j&                  ||j#                  |
      fi |}t)        |	|
fddi|}t+        |j,                  |j#                  ||             y t        ||||      }t%        j&                  |j#                  |	      |j#                  |
      fi |}t)        |	|
fi |}t+        ||j#                  ||             y )NrM   )      rN   g?Tr(   r+   g        r   g      ?rY   r   zNeeds gh-22490zFsum_cpu not implemented for UInt64, see data-apis/array-api-compat#242z-MArray is only available if SCIPY_ARRAY_API=1)r(   r+   r   )maskr   r   rO   )r(   r+   r   r   )r   rQ   rR   astyper   r   meanr   ravelgetattrr:   skipr   r   importorskipdict_get_namespacer9   r   r   r,   r   r   )r=   r(   r+   r   rP   r   r>   rU   shaper   r   ra   p0rY   kwargsmxpx_mpr!   rV   s                      r"   test_against_referencez#TestQuantile.test_against_referenceg   s    ii##$56JJEJ"))%0JJEJ"))%0zzuz%+vvd||&&$t4A
 B<BBqEBrFE"!(,-| = >"KL((2FthvFF''+C;;qt;,D..s{{1~@@C$QGfGGCCHHbjjEj&BC4(!+F<nnRZZ]BJJqMDVD A00RZZ5Z9:r$   c                     t        j                  |j                  d|j                        d      }|j                  t        |      k(  sJ y )NrJ   rO   r   )r   r   arangeint64rP   r   )r=   r>   r!   s      r"   test_integer_input_output_dtypez,TestQuantile.test_integer_input_output_dtype   s;    nnRYYrY:C@yy,R0000r$   zx, p, ref, kwargsr   r1   r&   g      ?r3   r2   r   )r   r_   )r   r   r8      )r3   r3   r3   g      ,@N   )g      ?r   g      ?)g      ?g      @g      
@c                     t        |      }|j                  |      |j                  |      |j                  ||      }}}t        j                  ||fi |}t	        ||       y )NrO   )r   r9   r   r   r	   )r=   r   r   rV   rl   r>   default_dtyper!   s           r"   test_edge_caseszTestQuantile.test_edge_cases   sW     ),JJqM2::a="**S*2Vc1nnQ,V,S!r$   )r   r   r2   c                     g d}|j                         }|rd||<   n|j                  |       t        j                  |j	                  t        |            d||      }|j                  t        |      k(  sJ y )N)r3   ru   r   r   r   r_   )r   popr   r   zerostuplerj   )r=   r(   r+   r>   rj   	out_shaper!   s          r"   test_size_0zTestQuantile.test_size_0   sd     JJL	IdOMM$nnRXXeEl3SthWyyE),,,,r$   )rA   rB   rC   c                    |dk(  r(t         j                  dk  rt        j                  d       t        j                  dt         j
                        }t        j                  ddd      }t        j                  |j                  |      |j                  |      |	      }t        j                  |||	      }t        ||j                  ||j
                               y )
NrC   z2.0.1z5Bug in np.quantile (numpy/numpy#26656) fixed in 2.0.1g       @rO   r   g      ?g      ?r6   )
r   __version__r:   rf   rq   r[   r   r   r9   r	   )r=   r   r>   r   r   r!   rV   s          r"   test_transitionzTestQuantile.test_transition   s    
 **r~~/GKKOPIIb

+IIa(nnRZZ]BJJqM&Ikk!Qv.RZZ2::Z>?r$   )__name__
__module____qualname__r@   r:   markparametrizerW   skip_xp_backendsro   rs   r   r   fullr{   rq   reshaperx   r~   r    r$   r"   r/   r/   (   s   &FP [[X
;< [[5
34
;4	<
; t,MN[[VaV,[[Z%7[[\+JK[[Wy)&<=[[X/'BC*; D > L 8 - O*;X1 [[0
c2662	
b!QRVV,rvvq!RVVRVV.Lb	Q
RR	 FFA;-rvvqkL&+A	Br(CBFF+fb\	:r(C$!)G	Hr(C&)A4+H	I
sCj'"''!RVV,b	1
"))Ar

"
"9
-sseWIT
*
,q6Aq6
-0A/BT
*
,	./"/" [[VY/[[Z%7- 8 0- [[XHJ	@J	@r$   r/   )r:   numpyr   scipyr   scipy._lib._array_apir   r   r   r   scipy._lib._array_api_no_0dr   r	   scipy._lib._utilr
   r   r   r#   r,   r/   r   r$   r"   <module>r      s       W W H .;;//  8X& '$ ,'@A+n5]@ ]@ 6 B]@r$   