
    -iiE                        d dl Z d dl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 d dlmZmZ d dlmZ e j        j        ZegZ edd          d	             Z ej        d d
h          d             Zd Z eej                   G d d                      Z edd          d             Z ee           G d d                      ZdS )    N)stats)_xp_searchsorted)xp_default_dtypeis_numpyis_torchis_jaxmake_xp_test_caseSCIPY_ARRAY_APIxp_sizexp_copy)xp_assert_closexp_assert_equal)_apply_over_batch)x   )pr   c                    |dk    r| t          j        |                     } t          j        |          }|                                }d||<   |dk    rL| j        dk    rt          j        || d                   n$t
          j                            | |          j        }nP|	                    d          r$t          t          j        |           ||          }nt          j        | ||          }t          j        |          }|dk    r7t          j        t          j        |                     rt           j        |d d <   t           j        ||<   |S )	Nomit      ?harrell-davisr   r   roundmethod	propagate)npisnancopysize	full_liker   mstatshdquantilesdata
startswithwinsor_reference_1dsortquantileasarrayanynan)r   r   
nan_policyr   p_maskress         e/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/stats/tests/test_quantile.pyquantile_reference_last_axisr.      s"   Vrx{{lOXa[[F	AAfI  ()!r|Aqt$$$L,,Q227 				7	#	# /!"'!**a88k!Qv...
*S//C[  RVBHQKK%8%8 AAA&CKJ       )excludedc                    t          |           }|dk    rEt          |dk     rt          j        ||z            nt          j        ||z  dz
                      }n|dk    rEt          |dk     rt          j        ||z            nt          j        ||z  dz
                      }nJ|dk    rDt          |dk     rt          j        ||z            nt          j        ||z  dz
                      }| |         S )Nround_nearestr   r   round_outwardround_inward)lenintr   r   floorceil)yr   r   njs        r-   r$   r$   /   s     	AA  1s77QQ0C0CDD	?	"	"1s77QA	0B0BCC	>	!	!!c''ArxA	/B/BCCQ4Kr/   c                   t          j        | |d          t          j        t          j        |          |d          }} t          | |||          }t          j        |d|          }|st          j        ||          }|S )Naxis)r   moveaxis
atleast_1dr.   squeeze)r   r   r@   r*   keepdimsr   r,   s          r-   quantile_referencerE   =   sx    ;q$##R[q1A1A4%L%LqA
&q!Z
@
@C
+c2t
$
$C )j4(((Jr/   c                      e Zd Zd Zd Z edddg          ej                            dg d          ej                            d	g d
          ej                            dddg          d                                                 Z	ej        
                    d           eddddg          ej                            dddg          ej                            dddg          ej                            dg d          ej                            dddg          ej                            dg d          ej                            dddg          d                                                                                                 Zd Ze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(                              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                            dg d0          ej                            dddg          d1                         Zej                            dg d2          d3             Zej                            d4ddg          d5             Zej                            dg d6          d7             Zej        
                    d          ej                            dg d6          ej                            d8d9d:g          d;                                     Zd+S )<TestQuantilec           	      2	   |                     g d          }|                     d          }d}t          j        t          |          5  t	          j        |                     ddg          |           d d d            n# 1 swxY w Y   t          j        t                    5  t	          j        |                     ddg          |           d d d            n# 1 swxY w Y   d	}t          j        t          |          5  t	          j        ||                     d
dg                     d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          j        |||                    ||j                             d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          j        ||d           d d d            n# 1 swxY w Y   t          j        t          |          5  t	          j        ||d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          j        ||d           d d d            n# 1 swxY w Y   t          |          sgd}t          j        t          |          5  t	          j        |                     |j	        ddg          |d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          j        ||d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          j        |||d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          j        |||d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          j        ||d           d d d            n# 1 swxY w Y   d }t          j        t          |          5  t	          j        ||                     dd!g          d           d d d            d S # 1 swxY w Y   d S )"Nr   r0      r   z`x` must have real dtype.)matchTFy      ?      ?r0   z"`p` must have real floating dtype.r   r   z`weights` must have real dtype.)weightsz"`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 duckr   z4`method='harrell-davis'` does not support `weights`.r   rL   r   z4`method='round_nearest'` does not support `weights`.r3   z/If specified, `keepdims` must be True or False.*   )rD   zD`keepdims` may be False only if the length of `p` along `axis` is 1.333333?)
r'   pytestraises
ValueErrorr   r&   astype	complex64r   r)   )selfxpr   r   messages        r-   test_input_validationz"TestQuantile.test_input_validationI   s   JJyyy!!JJsOO-]:W555 	9 	9N2::tUm44a888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9]:&& 	5 	5N2::tQi00!444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 7]:W555 	2 	2N1bjj!Q00111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 4]:W555 	E 	EN1a1bl)C)CDDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 7]:W555 	+ 	+N1ac****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+]:W555 	/ 	/N1ag....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ L]:W555 	) 	)N1aa((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) bzz 	R5Gz999 R Rrzz261a.991QQQQR R R R R R R R R R R R R R R /]:W555 	2 	2N1a1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 I]:W555 	D 	DN1a?CCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D I]:W555 	D 	DN1a?CCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D D]:W555 	. 	.N1a"----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. Y]:W555 	F 	FN1bjj#s44uEEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fs   
+BBB%+CC #C +D;;D?D?#1F  F$'F$G,,G03G0H66H:=H:JJ	J93K88K<?K< MMM,NNN9OO"%O"P**P.1P.-RRRc                    t          j        ||d          }|j        }t          j        |          }|                    d|j        d         t           j                  }g }g }|D ]T}|                    |          }	|                    t          j	        ||	                     |                    |	           Ut          j
        |          t          j
        |          }}|dk     r,t          j        |d          t          j        |d          }}t          j        |d|          t          j        |d|          }}t          j        ||j                  }||fS )Nr>   
   )r   dtyper0   r   r?   r\   )r   swapaxesndim
atleast_2dintegersshapeint32permutedappendrepeatstackrC   r'   r\   )
rV   r   r@   rngr_   countsx_reprL   x_counts_s
             r-   _get_weights_x_repzTestQuantile._get_weights_x_rep   s9   K4$$vM!bqwr{"(CC 	$ 	$Bll6**GLL2w//000NN7####%"(7*;*;w!88ZA666
7QR8S8S8S7EUB55r{7BPT7U7Uw*WAG444~r/   TzPyTorch doesn't have `betainc`.cupy)cpu_onlyreason
exceptionsr   )inverted_cdfaveraged_inverted_cdfclosest_observationhazeninterpolated_inverted_cdflinearmedian_unbiasednormal_unbiasedweibullr   r3   r4   r5   _lower_higher	_midpoint_nearestzshape_x, shape_p, axis))r[   Nr>   )r[   r[   r>   )r[   )r0   rJ   r>   ))r[   r0   Nr   rL   Fc           	         |rD|                     d          s|                     d          s|dk    rt          j        d           t          |          }t          j                            d          }|                    |          }	|                    |          }
|r|                     |	||          \  }}nd |	}}t          ||
|                     d          r
|dd          n||d|d u	          }|	                    |	|
          |	                    |
|
          }
}	||n|	                    ||
          }t          j        |	|
|||          }t          ||	                    ||
                     d S )N_r   r   z4`weights` not supported by private (legacy) methods.   lv_r   r   r   )r   r@   r*   rD   r]   )r   rL   r@   )r#   rQ   skipr   r   randomdefault_rngrm   rE   r'   r   r&   r   )rV   r   shape_xshape_pr@   rL   rW   r\   rh   r   r   rj   refr,   s                 r-   test_against_referencez#TestQuantile.test_against_reference   s     	P))#.. 	P&2C2CG2L2L 	P!?22KNOOO $$i##$566JJGJ$$JJGJ$$ 	%!44QcBBNGUU!1UG 16+<+<S+A+AMVABBZZv+t8KM M M zz!5z))2::au:+E+E1$_''"**WE*2R2RnQ&'MMMRZZ5Z99:::::r/   z%ignore:torch.searchsorted:UserWarningz	jax.numpyr@   r   r   rD   r*   )r   r   marrayr\   float32float64)rw   r   r3   c                     t          |          r|dk    rt          j        d           |r|dv rt          j        d           t          j                            d          }d}	|                    |	                              |          }
|                    |	                              |          }|                    |	          dk    }t          j        |          sJ t          j        |
|<   |st          j	        ||d	
          }t          |          r|                                }d|d<   d|d<   t          ||          }|r4|                     |
||          \  }}||n|                    |          }nd |
}}|dk    r t          st          j        d           |t          j        d           t          j        d          }t#          |||          }|                    |          }|                    |
|          }||n|                    |          }t'          j        ||                    |          fd|i|}t+          ||fddi|}t-          |j        |                    ||                     d S t#          ||||          }t'          j        |                    |
          |                    |          fd|i|}t+          ||fi |}t-          ||                    ||                     d S )Nr   z(`marray` currently incompatible with JAX>   r3   r   z'These methods don't yet support weightsr   )      r   g?Tr@   rD           r         ?z-MArray is only available if SCIPY_ARRAY_API=1z)MArray is not yet compatible with weights)r@   rD   r   )maskrL   r*   r   r]   )r@   rD   r*   r   )r   rQ   r   r   r   r   rT   r(   r)   meanr   ravelgetattrrm   r'   r
   importorskipdict_get_namespacer   r&   rE   r   r"   )rV   r@   rD   r*   r\   r   rL   rW   rh   rb   r   r   r   p0rj   r   kwargsmxpx_mpr,   r   s                        r-   test_against_reference_2z%TestQuantile.test_against_reference_2   s"    ":: 	D*00KBCCC 	Cv!CCCKABBBi##$566JJEJ""))%00JJEJ""))%00zzuz%%+vd||&$ 	5t444A
 B<< 	BBqEBrFE"" 	%!44QcBBNGU!(ggbjj6I6IGG!1UG!!" MKLLL"GHHH(22FthvFFFF''++C;;qt;,,D!(ggckk'6J6JG.s{{1~~QQwQ&QQC$UAKK&KFKKCCHbjjEj&B&BCCCF4(!+F< < <nRZZ]]BJJqMMUU7UfUU 44V44RZZ5Z99:::::r/   c                     t          j        |                    d|j                  d          }|j        t          |          k    sJ d S )Nr[   r]   r   )r   r&   arangeint64r\   r   )rV   rW   r,   s      r-   test_integer_input_output_dtypez,TestQuantile.test_integer_input_output_dtype   sG    nRYYrY::C@@y,R00000000r/   zx, p, ref, kwargsr   rI   r>   g      ?rJ   r0   r   )r   r   )r   r   rP      )rJ   rJ   rJ   g      ,@N   )g      ?r   g      ?)g      ?g      @g      
@c                     t          |          }|                    |          |                    |          |                    ||          }}}t          j        ||fi |}t	          ||           d S )Nr]   )r   r'   r   r&   r   )rV   r   r   r   r   rW   default_dtyper,   s           r-   test_edge_caseszTestQuantile.test_edge_cases   sq    $ ),,JJqMM2::a=="**S*2V2Vc1nQ,,V,,S!!!!!r/   )r   r   r0   c                    g d}|                                 }|rd||<   n|                    |           t          j        |                    t          |                    d||          }|j        t          |          k    sJ d S )N)rJ   r   r   r   r   r   )r   popr   r&   zerostuplerb   )rV   r@   rD   rW   rb   	out_shaper,   s          r-   test_size_0zTestQuantile.test_size_0  s     		JJLL	 	 IdOOMM$nRXXeEll33SthWWWyE),,,,,,,,r/   )rr   rs   rt   r{   r|   r}   r~   c                     |dk    r$t           j        dk     rt          j        d           t          j        dt           j                  }t          j        ddd          }t          j        |                    |          |                    |          |	          }t          j        |||	                    d
          r
|dd          n|	          }t          ||                    ||j                             d S )Nrt   z2.0.1z5Bug in np.quantile (numpy/numpy#26656) fixed in 2.0.1g       @r]   r   g     ?g      ?r   r   r   )r   __version__rQ   r   r   r   r   r&   r'   r#   r   )rV   r   rW   r   r   r,   r   s          r-   test_transitionzTestQuantile.test_transition  s     ***r~/G/GKOPPPIb
+++Ia'**nRZZ]]BJJqMM&IIIk!QV5F5Fs5K5K'WvabbzzQWXXXRZZ2:Z>>?????r/   zero_weightsc           	         t          |          r|j        dk     rt          j        d           t	          |          }t
          j                            d          }d}|                    d          }|                    d          }|r	d||dk     <   t          j        d	d
d          }t          j
        |                    ||          |                    ||          ||                    ||                    }	t          j
        ||||          }
t          |	|                    |
|                     d S )Nz2.0z'`weights` not supported by NumPy < 2.0.   z-\"}	rr   d   r   r   r   r   r   i,  r]   )r   rL   )r   r   rQ   r   r   r   r   r   linspacer   r&   r'   r   )rV   r   rW   r\   rh   r   r   rL   r   r,   r   s              r-   test_weights_against_numpyz'TestQuantile.test_weights_against_numpy*  s5   B<< 	CBNU22KABBB $$i##$566JJCJ  **#*&& 	'%&GGcM"KB$$nRZZZ77AU9S9S$*BJJweJ4T4TV V Vk!Qvw???RZZ5Z99:::::r/   )	rr   rs   rt   ru   rv   rw   rx   ry   rz   c                    t           j                            d          }d}|                    |                    |                    }t	          |          }|                    |                    |                    }|                    |                    |          dk               }|                    |                    |                    }	|                    |d|	          }	t          j        |||	|          }
t          j        ||          ||	|          |          }t          |
|           t          ||           d}|                    |                    |                    }t	          |          }|                    |                    |                    }|                    |                    |          dk               }|                    |                    |                    }	|                    ||j
        |          }|                    |d|	          }t          j        ||||d	          }
t          j        |||	d
|d          }t          |
|           t          ||           d S )Nr   r   r   皙?r   rN   )r   r   r>   )rL   r   r@   r   )rL   r*   r   r@   )r   r   r   r'   r   wherer   r&   r   r   r)   )rV   r   rW   rh   r;   r   x0r   i_zerorL   r,   r   rb   x_nannedweights_zeroeds                  r-   test_zero_weightszTestQuantile.test_zero_weights;  sD   
 i##$566 JJszzqz))**QZZJJszzqz))**CJJAJ..455**SZZQZ//00((62w//nQ76BBBnQwZGVG4DVTTTS!!!2 JJszzuz--..QZZJJszzuz--..CJJEJ22S899**SZZUZ334488FBFA..&"g66nQ>&rRRRnXq'(.vBH H HS!!!2r/   rb   2   )r   rJ   c                    t           j                            d          }|                    |                    |                    }|                    |                    |                    }|                    |          }t          j        ||||          }t          j        |||          }	t          ||	           d S )Nl   .,+r   rN   r   )r   r   r   r'   	ones_liker   r&   r   )
rV   r   rb   rW   rh   r   r   rL   r,   r   s
             r-   test_unity_weightszTestQuantile.test_unity_weights^  s     i##$566JJszzuz--..JJszzuz--..,,q//nQ76BBBnQ&111S!!!!!r/   )__name__
__module____qualname__rY   rm   skip_xp_backendsrQ   markparametrizer   filterwarningsr   r   r   r)   fullr   r   reshaper   r   r   r   r   r    r/   r-   rG   rG   F   sQ       3F 3F 3Fl  & t,M"(+ + +[X
8 
8 
89 9 [5LLLN N[Y66; ; 76N N9 9+ +;2 [ GHHt,M"(+!68 8 8[VaV,,[Z%77[\+J+J+JKK[Wy)&<==[X'S'S'STT[Y664; 4; 76 UT >= LK 87 -,8 8 IH4;l1 1 1 [0
c262	
))b!QRV,rvq!RVRV.Lb	Q
))RR	 FA;-rvqkL&+A	Br(CBF++fb\	:r(C$!)G)G	Hr(C&))A4+H+H	I
sCj'"'!RV,,b	1
")Ar


"
"9
-
-sseWIT
*
*
,q6Aq6
---0A0A0A/BT
*
*
,	 "" "# "" [VYYY//[Z%77- - 87 0/- [X	7 	7 	78 8	@ 	@8 8	@ [^eT];;; ; <;;  [X	 	 	  	 > [ GHH[X	 	 	  [Wr7m44" " 54	  IH" " "r/   rG   )ar   )vr   c                 0    t          j        | ||          S )Nside)r   searchsorted)r   r   r   s      r-   np_searchsortedr   o  s    ?1ad++++r/   c            	       r   e Zd Zej                            dddg          ej                            dddg          ej                            dg d          ej                            d	ddg          ej                            d
ddg          d                                                             ZdS )Test_XPSearchsortedr   leftrighttiesFTrb   )r   r   r0   r[      i  i'  )r0   r   )r   r0   )r0   r[   )r0   rJ   r   nans_xinfs_xc                 D   |r#t          |          rt          j        d           t          j                            d          }|r|                    d|          }n|                    |          }t          j        |t          j                  }t          j	        |t          j
                  }	t          j	        |t          j
                   }
t          j        t          j
         t          j
        t          j        g          }t          j        ||j        d d         dz             }|                    t          j        |
||	|fd          d          }|r(|                    |          d	k     }t          j        ||<   |rQ|                    |          d	k     }t          j
         ||<   |                    |          d
k    }t          j
        ||<   t          j        |d          }t          j        |t          j                  t          j        |t          j                  }}|                    d          j        }t'          |          dk    rP|j        dk    rE|j        d         dk    r4|                    |j        d d         |j        d         fz   |          }n'|                    t-          |||          |          }|                    |          |                    |          }}t/          |||          }t1          ||           d S )Nztorch sorts NaNs differentlyl   %Dg hr   r   r]   r>   )rJ   r?   r   g?r   r   r   )r   rQ   r   r   r   r   ra   r'   r   	nextafterinfr)   broadcast_torb   rd   concatenater%   r   r\   r   r_   emptyr   r   r   )rV   r   r   rb   r   r   rW   rh   r   xrxlrk   r:   r   xp_default_intr   r,   s                    r-   test_ndzTest_XPSearchsorted.test_ndv  s     	8hrll 	8K6777i##$677 	"QU++AA

5!!AJq
+++\!RV$$\!bfW%%Z"&"&"&122_R"!455LLQBbAAALKK 	::e$$s*DfAdG 	::e$$s*DvgAdG::e$$s*DfAdGGABz!2:...
1BJ0O0O0O1A,1::??qvzzagbkQ.>.>((173B3<172;.8(OOCC**_Q===^*TTCzz!}}bjjmm1q!$///S!!!!!r/   N)r   r   r   rQ   r   r   r   r   r/   r-   r   r   t  s        [Vfg%677[VeT]33[W 'L 'L 'L M M[Xt}55[Xt}55 "  " 65 65M M 43 87 "  "  "r/   r   ) rQ   numpyr   scipyr   scipy.stats._quantiler   scipy._lib._array_apir   r   r   r   r	   r
   r   r   scipy._lib._array_api_no_0dr   r   scipy._lib._utilr   r   r   lazy_xp_modulesr.   	vectorizer$   rE   r&   rG   r   r   r   r/   r-   <module>r      s              2 2 2 2 2 2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 I H H H H H H H . . . . . .;/ '8X&&  '&. 1v
 
 
   5>""e" e" e" e" e" e" e" #"e"P	 8X&&, , '&, #$$'" '" '" '" '" '" '" %$'" '" '"r/   