
    doiE                     |   S SK r S SKrS SKJr  S SKJr  S SKJrJ	r	J
r
JrJrJrJrJr  S SKJrJr  S SKJr  \ R*                  R,                  r\/r\" SS5      S	 5       r\R2                  " S S
1S9S 5       rS r\" \R8                  5       " S S5      5       r\" SS5      S 5       r\" \5       " S S5      5       rg)    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                    US:X  a  U [         R                  " U 5      )    n [         R                  " U5      nUR                  5       nSX'   US:X  aS  U R                  S:X  a  [         R                  " XS   5      O([
        R                  R                  X5      R                  nOLUR                  S5      (       a!  [        [         R                  " U 5      X5      nO[         R                  " XUS9n[         R                  " U5      nUS:X  aB  [         R                  " [         R                  " U 5      5      (       a  [         R                  US S & [         R                  XT'   U$ )	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         [/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/stats/tests/test_quantile.pyquantile_reference_last_axisr.      s    Vrxx{lOXXa[F	AAI ()!r||At$LL,,Q277 				7	#	#!"''!*a8kk!v.
**S/C[ RVVBHHQK%8%8A&&CKJ       )excludedc                    [        U 5      nUS:X  aF  [        US:  a  [        R                  " X-  5      O[        R                  " X1-  S-
  5      5      nX   $ US:X  aF  [        US:  a  [        R                  " X-  5      O[        R
                  " X1-  S-
  5      5      nX   $ US:X  aB  [        US:  a  [        R
                  " X-  5      O[        R                  " X1-  S-
  5      5      nU W   $ )Nround_nearestr   r   round_outwardround_inward)lenintr   r   floorceil)yr   r   njs        r-   r$   r$   /   s     	AA 1s70CD
 4K	 
?	"1s7	0BC 4K 
>	!!c'rxx	/BCQ4Kr/   c                   [         R                  " XS5      [         R                  " [         R                  " U5      US5      p[        XX55      n[         R                  " USU5      nU(       d  [         R                  " XbS9nU$ )Naxis)r   moveaxis
atleast_1dr.   squeeze)r   r   r@   r*   keepdimsr   r,   s          r-   quantile_referencerE   =   s^    ;;q#R[[q1A4%Lq
&qZ
@C
++c2t
$Cjj(Jr/   c                      \ rS rSrS rS r\" SSS/S9\R                  R                  S/ S	Q5      \R                  R                  S
/ SQ5      \R                  R                  SSS/5      S 5       5       5       5       r
\R                  R                  S5      \" SSSS/S9\R                  R                  SSS/5      \R                  R                  SSS/5      \R                  R                  S/ SQ5      \R                  R                  SSS/5      \R                  R                  S/ SQ5      \R                  R                  SSS/5      S 5       5       5       5       5       5       5       5       rS r\R                  R                  S/ S\R                  0 4/ SQS SSS!\R                  /\R                  SS"\R                  \R                  /0 4/ SQ/ / 0 4\R                  S#//S\R                  S#/SS$04/ / /S\R                   " S#\R                  5      SS 04/ / /S\R"                  " S%5      SSS&.4/ / /S\R"                  " S'5      SSS&.4/ SS(/\R                   " S#\R                  5      0 4\R$                  " SS)5      R'                  S*5      SS+///S,SS&.4SS#/S"S-/// S.Q/ S/Q/S,SS&.4/
5      S0 5       r\R                  R                  S/ S1Q5      \R                  R                  SSS/5      S2 5       5       r\R                  R                  S/ S3Q5      S4 5       r\R                  R                  S5SS/5      S6 5       r\R                  R                  S/ S7Q5      S8 5       r\R                  R                  S5      \R                  R                  S/ S7Q5      \R                  R                  S9S:S;/5      S< 5       5       5       rS=rg,)>TestQuantileF   c           	      	   UR                  / SQ5      nUR                  S5      nSn[        R                  " [        US9   [        R
                  " UR                  SS/5      U5        S S S 5        [        R                  " [        5         [        R
                  " UR                  SS/5      U5        S S S 5        S	n[        R                  " [        US9   [        R
                  " X!R                  S
S/5      5        S S S 5        Sn[        R                  " [        US9   [        R
                  " X#UR                  X!R                  5      S9  S S S 5        Sn[        R                  " [        US9   [        R
                  " X#SS9  S S S 5        [        R                  " [        US9   [        R
                  " X#SS9  S S S 5        Sn[        R                  " [        US9   [        R
                  " X#SS9  S S S 5        [        U5      (       dV  Sn[        R                  " [        US9   [        R
                  " UR                  UR                  SS/5      USS9  S S S 5        Sn[        R                  " [        US9   [        R
                  " X#SS9  S S S 5        Sn[        R                  " [        US9   [        R
                  " X#USS9  S S S 5        Sn[        R                  " [        US9   [        R
                  " X#USS9  S S S 5        Sn[        R                  " [        US9   [        R
                  " X#SS9  S S S 5        S n[        R                  " [        US9   [        R
                  " X!R                  SS!/5      SS9  S S S 5        g ! , (       d  f       GN7= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN^= f! , (       d  f       GN9= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNo= f! , (       d  f       GNG= f! , (       d  f       GN = f! , (       d  f       g = f)"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   rM   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_validation"TestQuantile.test_input_validationI   s   JJy!JJsO-]]:W5NN2::tUm4a8 6]]:&NN2::tQi0!4 ' 7]]:W5NN1jj!Q01 6 4]]:W5NN11ll)CD 6 7]]:W5NN1c* 6]]:W5NN1g. 6 L]]:W5NN1a( 6 bzz5Gz9rzz2661a.91Q : /]]:W5NN11 6 I]]:W5NN1?C 6 I]]:W5NN1?C 6 D]]:W5NN1"- 6 Y]]:W5NN1jj#s4uE 65[ 65&& 65 65 6555 65
 :9 65 65 65 65 65s    )N)N+(N="/O4O!+O3$P-3PP)<P;6Q0Q)'Q1
N(+
N:=
O
O!
O03
P
P
P&)
P8;
Q

Q
Q.1
Q?c                    [         R                  " XS5      nUR                  n[         R                  " U5      nUR	                  SUR
                  S   [         R                  S9n/ n/ nU HJ  nUR                  U5      n	UR                  [         R                  " X5      5        UR                  U	5        ML     [         R                  " U5      [         R                  " U5      pvUS:  a)  [         R                  " USS9[         R                  " USS9pv[         R                  " USU5      [         R                  " USU5      pv[         R                  " XqR                  S9nXv4$ )Nr>   
   )r   dtyper0   r   r?   r^   )r   swapaxesndim
atleast_2dintegersshapeint32permutedappendrepeatstackrC   r'   r^   )
rW   r   r@   rngra   countsx_reprM   x_counts_s
             r-   _get_weights_x_repTestQuantile._get_weights_x_rep   s   KK$vvMM!bqwwr{"((CBll6*GLL2/0NN7#  %"((7*;w!8ZZA6

7QR8S7UB5r{{7BPT7Uw**WGG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   rK   r>   ))r]   r0   Nr   rM   Fc           	         U(       aH  UR                  S5      (       d  UR                  S5      (       d  US:X  a  [        R                  " S5        [        U5      n[        R
                  R                  S5      nUR                  US9n	UR                  US9n
U(       a  U R                  XU5      u  p[OS U	p[        XUR                  S5      (       a  USS  OUUSUS LS	9nUR                  XS
9UR                  XS
9pUc  UOUR                  XWS
9n[        R                  " XXUS9n[        XR                  XS
95        g )N_r   r   z4`weights` not supported by private (legacy) methods.   lv_r   r   r   )r   r@   r*   rD   r_   )r   rM   r@   )r#   rR   skipr   r   randomdefault_rngro   rE   r'   r   r&   r   )rW   r   shape_xshape_pr@   rM   rX   r^   rj   r   r   rl   refr,   s                 r-   test_against_reference#TestQuantile.test_against_reference   s)    ))#..&2C2CG2L2L!?2KKNO $ii##$56JJGJ$JJGJ$!44QcBNGU!1U 6+<+<S+A+AVABZv+t8KM zz!z)2::a:+E1$_'"**W*2RnnQ&MZZZ9:r/   z%ignore:torch.searchsorted:UserWarningz	jax.numpyr@   r   r   rD   r*   )r   r   marrayr^   float32float64)rz   r   r3   c                    [        U5      (       a  US:X  a  [        R                  " S5        U(       a  US;   a  [        R                  " S5        [        R                  R                  S5      nSn	UR	                  U	S9R                  U5      n
UR	                  U	S9R                  U5      nUR	                  U	S9S:  n[        R                  " U5      (       d   e[        R                  X'   U(       d  [        R                  " XS	S
9n[        U5      (       a  UR                  5       nSUS'   SUS'   [        Xt5      nU(       a+  U R                  XU5      u  pnUc  UOUR                  U5      nOS U
pUS:X  a  [        (       d  [        R                  " S5        Ub  [        R                  " S5        [        R                   " S5      n[#        XUS9nUR%                  U5      nUR                  XS9nUc  UOUR                  U5      n[&        R(                  " UUR                  U5      4SU0UD6n[+        X4SS0UD6n[-        UR.                  UR                  UUS95        g [#        XX5S9n[&        R(                  " UR                  U
5      UR                  U5      4SU0UD6n[+        X40 UD6n[-        UUR                  UUS95        g )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   )maskrM   r*   r   r_   )r@   rD   r*   r   )r   rR   r   r   r   r   rU   r(   r)   meanr   ravelgetattrro   r'   r
   importorskipdict_get_namespacer   r&   rE   r   r"   )rW   r@   rD   r*   r^   r   rM   rX   rj   rd   r   r   r   p0rl   r   kwargsmxpx_mpr,   r   s                        r-   test_against_reference_2%TestQuantile.test_against_reference_2   sb    "::*0KKBCv!CCKKABii##$56JJEJ"))%0JJEJ"))%0zzuz%+vvd|||&&t4A
 B<<BBqEBrF"!44QcBNG!(gbjj6IG!1U!"?KL"GH((2FtvFF''+C;;q;,D!(gckk'6JG..s{{1~QwQ&QC$UK&KFKCCHHbjjEj&BC4!+<nnRZZ]BJJqMU7UfU 4V4RZZ5Z9:r/   c                     [         R                  " UR                  SUR                  S9S5      nUR                  [        U5      :X  d   eg )Nr]   r_   r   )r   r&   arangeint64r^   r   )rW   rX   r,   s      r-   test_integer_input_output_dtype,TestQuantile.test_integer_input_output_dtype   s;    nnRYYrY:C@yy,R0000r/   zx, p, ref, kwargsr   rJ   r>   g      ?rK   r0   r   )r   r   )r   r   rQ      )rK   rK   rK   g      ,@N   )g      ?r   g      ?)g      ?g      @g      
@c                     [        U5      nUR                  U5      UR                  U5      UR                  X6S9p2n[        R                  " X40 UD6n[	        Xs5        g )Nr_   )r   r'   r   r&   r   )rW   r   r   r   r   rX   default_dtyper,   s           r-   test_edge_casesTestQuantile.test_edge_cases   sO    $ ),JJqM2::a="**S*2VcnnQ,V,!r/   )r   r   r0   c                     / SQnUR                  5       nU(       a  SXQ'   OUR                  U5        [        R                  " UR	                  [        U5      5      SXS9nUR                  [        U5      :X  d   eg )N)rK   r   r   r   r   r   )r   popr   r&   zerostuplerd   )rW   r@   rD   rX   rd   	out_shaper,   s          r-   test_size_0TestQuantile.test_size_0  s`     JJL	IOMM$nnRXXeEl3StWyyE),,,,r/   )ru   rv   rw   r~   r   r   r   c                    US:X  a*  [         R                  S:  a  [        R                  " S5        [         R                  " S[         R
                  S9n[         R                  " SSS5      n[        R                  " UR                  U5      UR                  U5      US	9n[         R                  " X4UR                  S
5      (       a  USS  OUS	9n[        XRR                  XbR
                  S95        g )Nrw   z2.0.1z5Bug in np.quantile (numpy/numpy#26656) fixed in 2.0.1g       @r_   r   g     ?g      ?r   r   r   )r   __version__rR   r   r   r   r   r&   r'   r#   r   )rW   r   rX   r   r   r,   r   s          r-   test_transitionTestQuantile.test_transition  s     **r~~/GKKOPIIb

+IIa'*nnRZZ]BJJqM&Ikk!V5F5Fs5K5KvabzQWXZZ::Z>?r/   zero_weightsc           
      $   [        U5      (       a&  UR                  S:  a  [        R                  " S5        [	        U5      n[
        R                  R                  S5      nSnUR                  SS9nUR                  SS9nU(       a  SXwS:  '   [
        R                  " S	S
S5      n[        R                  " UR                  XcS9UR                  XS9XRR                  XsS9S9n	[
        R                  " XhXWS9n
[        XR                  XS95        g )Nz2.0z'`weights` not supported by NumPy < 2.0.   z-\"}	ru   d   r   r   r   r   r   i,  r_   )r   rM   )r   r   rR   r   r   r   r   r   linspacer   r&   r'   r   )rW   r   rX   r^   rj   r   r   rM   r   r,   r   s              r-   test_weights_against_numpy'TestQuantile.test_weights_against_numpy*  s    B<<BNNU2KKAB $ii##$56JJCJ **#*&%&GcM"KKB$nnRZZZ7A9S$*JJwJ4TVkk!v?ZZZ9:r/   )	ru   rv   rw   rx   ry   rz   r{   r|   r}   c           	         [         R                  R                  S5      nSnUR                  UR                  US95      n[	        U5      nUR                  UR                  US95      nUR                  UR                  US9S:  5      nUR                  UR                  US95      n	UR                  USU	5      n	[        R                  " XWXS9n
[        R                  " XX)    XyU)    US9n[        X5        [        XV5        SnUR                  UR                  US95      n[	        U5      nUR                  UR                  US95      nUR                  UR                  US9S:  5      nUR                  UR                  US95      n	UR                  XR                  U5      nUR                  USU	5      n[        R                  " XWXSS	9n
[        R                  " XU	S
USS9n[        X5        [        XV5        g )Nr   r   r   皙?r   rO   )r   r   r>   )rM   r   r@   r   )rM   r*   r   r@   )r   r   r   r'   r   wherer   r&   r   r   r)   )rW   r   rX   rj   r;   r   x0r   i_zerorM   r,   r   rd   x_nannedweights_zeroeds                  r-   test_zero_weightsTestQuantile.test_zero_weights;  s   
 ii##$56 JJszzqz)*QZJJszzqz)*CJJAJ.45**SZZQZ/0((62w/nnQ7BnnQwZVG4DVT! JJszzuz-.QZJJszzuz-.CJJEJ2S89**SZZUZ3488FFFA.&"g6nnQ>rRnnX'(.vBH!r/   rd   2   )r   rK   c                 F   [         R                  R                  S5      nUR                  UR                  US95      nUR                  UR                  US95      nUR	                  U5      n[
        R                  " XVXqS9n[
        R                  " XVUS9n	[        X5        g )Nl   .,+r   rO   r   )r   r   r   r'   	ones_liker   r&   r   )
rW   r   rd   rX   rj   r   r   rM   r,   r   s
             r-   test_unity_weightsTestQuantile.test_unity_weights^  s     ii##$56JJszzuz-.JJszzuz-.,,q/nnQ7BnnQ&1!r/    )__name__
__module____qualname____firstlineno__rZ   ro   skip_xp_backendsrR   markparametrizer   filterwarningsr   r   r   r)   fullr   r   reshaper   r   r   r   r   r   __static_attributes__r   r/   r-   rG   rG   F   s   3Fl& t,M"(+[[X
89 [[5LN[[Y6; 7N9+;2 [[ GHt,M"(+!68[[VaV,[[Z%7[[\+JK[[Wy)&<=[[X'ST[[Y64; 7 U > L 8 -8 I4;l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	78	@8	@ [[^eT];; <;  [[X		> [[ GH[[X	 [[Wr7m4" 5	 I"r/   rG   )ar   )vr   c                 ,    [         R                  " XUS9$ )Nside)r   searchsorted)r   r   r   s      r-   np_searchsortedr   o  s    ??1d++r/   c            	       d   \ rS rSr\R
                  R                  SSS/5      \R
                  R                  SSS/5      \R
                  R                  S/ S	Q5      \R
                  R                  S
SS/5      \R
                  R                  SSS/5      S 5       5       5       5       5       rSrg)Test_XPSearchsortedit  r   leftrighttiesFTrd   )r   r   r0   r]      i  i'  )r0   r   )r   r0   )r0   r]   )r0   rK   r   nans_xinfs_xc                 4   U(       a&  [        U5      (       a  [        R                  " S5        [        R                  R                  S5      nU(       a  UR                  SUS9nOUR	                  U5      n[        R                  " U[        R                  S9n[        R                  " U[        R                  5      n	[        R                  " U[        R                  * 5      n
[        R                  " [        R                  * [        R                  [        R                  /5      n[        R                  " XR                  S S S-   5      nUR                  [        R                  " XX4SS9SS9nU(       a&  UR	                  U5      S	:  n[        R                  X'   U(       aM  UR	                  U5      S	:  n[        R                  * X'   UR	                  U5      S
:  n[        R                  X'   [        R                   " USS9n[        R                  " U[        R"                  S9[        R                  " U[        R"                  S9pUR                  S5      R$                  n['        U5      S:X  aR  UR(                  S:  aB  UR                  S   S:w  a/  UR+                  UR                  S S UR                  S   4-   US9nOUR                  [-        XUS9US9nUR                  U5      UR                  U5      p[/        XUS9n[1        UU5        g )Nztorch sorts NaNs differentlyl   %Dg hr   r   r_   r>   )rK   r?   r   g?r   r   r   )r   rR   r   r   r   r   rc   r'   r   	nextafterinfr)   broadcast_tord   rf   concatenater%   r   r^   r   ra   emptyr   r   r   )rW   r   r   rd   r   r   rX   rj   r   xrxlrm   r:   r   xp_default_intr   r,   s                    r-   test_ndTest_XPSearchsorted.test_ndv  s2    hrllKK67ii##$67QU+A

5!AJJq

+\\!RVV$\\!bffW%ZZ"&&"&&"&&12__R"!45LLbALK::e$s*DffAG::e$s*DvvgAG::e$s*DffAGGGABzz!2::.

1BJJ0O1A,,1:?qvvzaggbkQ.>((1773B<1772;.8(OC**_Q=^*TCzz!}bjjm1q$/S!r/   r   N)	r   r   r   r   rR   r   r   r   r   r   r/   r-   r   r   t  s    [[Vfg%67[[VeT]3[[W 'L M[[Xt}5[[Xt}5 " 6 6M 4 8 "r/   r   ) rR   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	 	 	 I .;;// '8X& '. 1v
 
 5>>"e" e" #e"P	 8X&, ', #$'" '" %'"r/   