
    >qj                     >   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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 d dlmc mZ d dlmZ e j@                  jB                  Z!egZ" edd	      d
        Z# ejH                  d dh      d        Z%d Z& eejN                         G d d             Z( edd      d        Z) ee       G d d             Z* edd      d        Z+d dddddZ, e- e.e            Z/ eej`                         G d d             Z1y)    N)stats)_xp_searchsorted_estimated_cdf_methods$_estimated_cdf_discontinuous_methods!_estimated_cdf_continuous_methods)
xp_default_dtypeis_numpyis_torchis_jaxis_cupyis_array_api_strictmake_xp_test_caseSCIPY_ARRAY_APIxp_sizexp_copy)xp_assert_closexp_assert_equal)_apply_over_batch)_broadcast_arrays)x   )pr   c                    |dk(  r| t        j                  |           } t        j                  |      }|j                         }d||<   |dk(  rS| j                  dk(  rt        j                  || d         n)t
        j                  j                  | |      j                  }nJ|j                  d      r!t        t        j                  |       ||      }nt        j                  | ||      }t        j                  |      }|dk(  r;t        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         ^/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/scipy/stats/tests/test_quantile.pyquantile_reference_last_axisr4      s    Vrxx{lOXXa[F	AAfI ()!r||Aqt$LL,,Q277 				7	#!"''!*a8kk!Qv.
**S/C[ RVVBHHQK%8A&&CKJ       )excludedc                    t        |       }|dk(  rFt        |dk  rt        j                  ||z        nt        j                  ||z  dz
              }| |   S |dk(  rFt        |dk  rt        j                  ||z        nt        j
                  ||z  dz
              }| |   S |dk(  rAt        |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        r3   r*   r*   4   s     	AA 1s7QQ0CD
 Q4K	 
?	"1s7QA	0BC Q4K 
>	!!c'ArxxA	/BCQ4Kr5   c                   t        j                  | |d      t        j                  t        j                  |      |d      }} t        | |||      }t        j                  |d|      }|st        j                  ||      }|S )Naxis)r!   moveaxis
atleast_1dr4   squeeze)r   r   rF   r0   keepdimsr   r2   s          r3   quantile_referencerK   B   sh    ;;q$#R[[q1A4%LqA
&q!Z
@C
++c2t
$Cjj4(Jr5   c                      e Zd Zd Zd Z edddg      ej                  j                  dg d      ej                  j                  d	g d
      ej                  j                  dddg      d                             Z	ej                  j                  d       eddddg      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g d      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 d0      ej                  j                  dddg      d1               Zej                  j                  dg d2      d3        Zej                  j                  d4ddg      d5        Zej                  j                  dg d6      d7        Zej                  j                  d      ej                  j                  dg d6      ej                  j                  d8d9d:g      d;                      Z eddddg      d<        Zy+)=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
                  |||j                  ||j                               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        t        |      sZd}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
                  |||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   #xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   gxY w# 1 sw Y   8x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   Lx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   r6      r   `x` must have real dtype.matchTF      ?      ?r6   z"`p` must have real floating dtype.r   r   z`weights` must have real dtype.)weights"`axis` must be an integer or None.rE   r   rD   7`axis` is not compatible with the shapes of the inputs.The input contains nan valuesraiser0   z`method` must be one of...a duckr   z4`method='harrell-davis'` does not support `weights`.r   rU   r   z4`method='round_nearest'` does not support `weights`.r9   /If specified, `keepdims` must be True or False.*   rJ   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        r3   test_input_validationz"TestQuantile.test_input_validationN   sx   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 4]]:W5 	ENN1a1bll)CD	E 7]]:W5 	+NN1ac*	+]]:W5 	/NN1ag.	/ L]]:W5 	)NN1aa(	) bz5Gz9 Rrzz2661a.91QR /]]:W5 	2NN1a1	2 I]]:W5 	DNN1a?C	D I]]:W5 	DNN1a?C	D D]]:W5 	.NN1a"-	. Y]]:W5 	FNN1bjj#s4uE	F 	F[	9 	9	5 	5	2 	2	E 	E	+ 	+	/ 	/	) 	)
R R	2 	2	D 	D	D 	D	. 	.	F 	Fs   (O(O(O!%3O.=O;9P7P 5P"P/P<Q	Q*Q"OO!O+.O8;PPP"P,/P9<Q	QQ"Q+c                    t        j                  ||d      }|j                  }t        j                  |      }|j	                  d|j
                  d   t         j                        }g }g }|D ]I  }|j                  |      }	|j                  t        j                  ||	             |j                  |	       K t        j                  |      t        j                  |      }}|dk  r.t        j                  |d      t        j                  |d      }}t        j                  |d|      t        j                  |d|      }}t        j                  ||j                        }||fS )NrD   
   )r$   dtyper6   r   rE   rm   )r!   swapaxesndim
atleast_2dintegersshapeint32permutedappendrepeatstackrI   r-   rm   )
rg   r   rF   rngrp   countsx_reprU   x_counts_s
             r3   _get_weights_x_repzTestQuantile._get_weights_x_rep   s   KK4$vvMM!bqwwr{"((C 	$Bll6*GLL2w/0NN7#	$ %"((7*;w!8ZZA6

7QR8S7EUB5r{{7BPT7Uw**WAGG4~r5   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   r9   r:   r;   _lower_higher	_midpoint_nearestzshape_x, shape_p, axis))rl   NrD   )rl   rl   rD   )rl   )r6   rP   rD   ))rl   r6   Nr   rU   Fc           	         |r<|j                  d      s|j                  d      s|dk(  rt        j                  d       t        |      }t        j
                  j                  d      }|j                  |      }	|j                  |      }
|r| j                  |	||      \  }}nd |	}}t        ||
|j                  d      r|dd  n||d|d u	      }|j                  |	|
      |j                  |
|
      }
}	||n|j                  ||
      }t        j                  |	|
|||      }t        ||j                  ||
             y )N_r   r   z4`weights` not supported by private (legacy) methods.   lv_r$   r   r    )r   rF   r0   rJ   rn   )r   rU   rF   )r)   rb   skipr   r!   randomdefault_rngr~   rK   r-   r   r,   r   )rg   r   shape_xshape_prF   rU   rh   rm   ry   r   r   r{   refr2   s                 r3   test_against_referencez#TestQuantile.test_against_reference   s6    ))#.&2C2CG2L!?2KKNO $ii##$56JJGJ$JJGJ$!44QcBNGU!1UG 16+<+<S+AVABZv+t8KM zz!5z)2::au:+E1$_'"**WE*2RnnQ&'MRZZ5Z9:r5   %ignore:torch.searchsorted:UserWarning	jax.numpyrF   r   r   rJ   r0   )r   r    marrayrm   float32float64)r   r   r9   c                    t        |      r|dk(  rt        j                  d       |r|dv rt        j                  d       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        ||      }|r,| j                  |
||      \  }}||n|j                  |      }nd |
}}|dk(  rt        st        j                  d       |t        j                  d       t        j                   d      }t#        |||      }|j%                  |      }|j                  |
|      }||n|j                  |      }t'        j(                  ||j                  |      fd|i|}t+        ||fddi|}t-        |j.                  |j                  ||             y t#        ||||      }t'        j(                  |j                  |
      |j                  |      fd|i|}t+        ||fi |}t-        ||j                  ||             y )Nr   (`marray` currently incompatible with JAX>   r9   r   z'These methods don't yet support weightsr         r   皙?TrF   rJ           r         ?-MArray is only available if SCIPY_ARRAY_API=1z)MArray is not yet compatible with weightsrF   rJ   r   maskrU   r0   r   rn   rF   rJ   r0   r   )r   rb   r   r!   r   r   re   r.   r/   meanr	   ravelgetattrr~   r-   r   importorskipdict_get_namespacer   r,   rK   r   r(   )rg   rF   rJ   r0   rm   r   rU   rh   ry   rs   r   r   r   p0r{   r   kwargsmxpx_mpr2   r   s                        r3   test_against_reference_2z%TestQuantile.test_against_reference_2   sr    ":*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E"!44QcBNGU!(gbjj6IG!1UG!"KL"GH((2FthvFF''+C;;qt;,D!(gckk'6JG..s{{1~QwQ&QC$UAK&KFKCCHHbjjEj&BC4(!+F<nnRZZ]BJJqMU7UfU 4V4RZZ5Z9:r5   c                     t        j                  |j                  d|j                        d      }|j                  t        |      k(  sJ y )Nrl   rn   r   )r   r,   arangeint64rm   r   )rg   rh   r2   s      r3   test_integer_input_output_dtypez,TestQuantile.test_integer_input_output_dtype   s;    nnRYYrY:C@yy,R0000r5   zx, p, ref, kwargsr   rO   rD   g      ?rP   r6   r   r   r   r   r   ra      rP   rP   rP         ,@N         ?r         ?g      ?      @g      
@c                     t        |      }|j                  |      |j                  |      |j                  ||      }}}t        j                  ||fi |}t	        ||       y )Nrn   )r   r-   r   r,   r   )rg   r   r   r   r   rh   default_dtyper2   s           r3   test_edge_caseszTestQuantile.test_edge_cases   sW    $ ),JJqM2::a="**S*2Vc1nnQ,V,S!r5   )r   r   r6   c                     g d}|j                         }|rd||<   n|j                  |       t        j                  |j	                  t        |            d||      }|j                  t        |      k(  sJ y )N)rP   r   r   r   r   r   )r#   popr   r,   zerostuplers   )rg   rF   rJ   rh   rs   	out_shaper2   s          r3   test_size_0zTestQuantile.test_size_0  sd     JJL	IdOMM$nnRXXeEl3SthWyyE),,,,r5   )r   r   r   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                  |j                  |      |j                  |      |	      }t        j                  |||j                  d
      r|dd  n|	      }t        ||j                  ||j
                               y )Nr   z2.0.1z5Bug in np.quantile (numpy/numpy#26656) fixed in 2.0.1       @rn   r   g     ?g      ?r   r   r   )r!   __version__rb   r   r   r   r   r,   r-   r)   r   )rg   r   rh   r   r   r2   r   s          r3   test_transitionzTestQuantile.test_transition!  s     **r~~/GKKOPIIb

+IIa'*nnRZZ]BJJqM&Ikk!QV5F5Fs5KvabzQWXRZZ2::Z>?r5   zero_weightsc           	      L   t        |      r&|j                  dk  r|rt        j                  d       t	        |      }t
        j                  j                  d      }d}|j                  d      }|j                  d      }|rd||dk  <   t        j                  d	d
d      }t        j                  |j                  ||      |j                  ||      ||j                  ||            }	t        j                  ||||      }
t        |	|j                  |
|             y )Nz2.1.3z6`Bug in np.quantile (numpy/numpy#27563) fixed in 2.1.3   z-\"}	r   d   r   r   r   r   r   i,  rn   )r   rU   )r	   r   rb   r   r   r!   r   r   linspacer   r,   r-   r   )rg   r   rh   rm   ry   r   r   rU   r   r2   r   s              r3   test_weights_against_numpyz'TestQuantile.test_weights_against_numpy/  s    B<BNNW4KKPQ $ii##$56JJCJ **#*&%&GGcM"KKB$nnRZZZ7AU9S$*BJJweJ4TVkk!Qvw?RZZ5Z9:r5   )	r   r   r   r   r   r   r   r   r   c                 V   t         j                  j                  d      }d}|j                  |j                  |            }t	        |      }|j                  |j                  |            }|j                  |j                  |      dk        }|j                  |j                  |            }	|j                  |d|	      }	t        j                  |||	|      }
t        j                  ||    ||	|    |      }t        |
|       t        ||       d}|j                  |j                  |            }t	        |      }|j                  |j                  |            }|j                  |j                  |      dk        }|j                  |j                  |            }	|j                  ||j                  |      }|j                  |d|	      }t        j                  ||||d	      }
t        j                  |||	d
|d      }t        |
|       t        ||       y )Nr   r   r   皙?r   r]   )r   r   rD   )rU   r   rF   r   )rU   r0   r   rF   )r!   r   r   r-   r   wherer   r,   r   r   r/   )rg   r   rh   ry   rA   r   x0r   i_zerorU   r2   r   rs   x_nannedweights_zeroeds                  r3   test_zero_weightszTestQuantile.test_zero_weights@  s   
 ii##$56 JJszzqz)*QZJJszzqz)*CJJAJ.45**SZZQZ/0((62w/nnQ76BnnQwZGVG4DVTS!2 JJszzuz-.QZJJszzuz-.CJJEJ2S89**SZZUZ3488FBFFA.&"g6nnQ>&rRnnXq'(.vBHS!2r5   rs   2   )r   rP   c                 b   t         j                  j                  d      }|j                  |j                  |            }|j                  |j                  |            }|j	                  |      }t        j                  ||||      }t        j                  |||      }	t        ||	       y )Nl   .,+r   r]   r   )r!   r   r   r-   	ones_liker   r,   r   )
rg   r   rs   rh   ry   r   r   rU   r2   r   s
             r3   test_unity_weightszTestQuantile.test_unity_weightsc  s     ii##$56JJszzuz-.JJszzuz-.,,q/nnQ76BnnQ&1S!r5   c                    t        dd      }|j                  |j                  |j                  |j                  g|j                  ddgg      }t        j                  |dfi |ddi}t        ||j                  |j                  d	g             t        j                  |dfi |dd
i}t        ||j                  |j                  |j                  g             y )Nr   rD   r   rF   r6   rP   r   r0   r   r   r    )r   r-   r/   r   r,   r   )rg   rh   r   r   r2   s        r3   "test_all_nan_harrell_davis_gh24707z/TestQuantile.test_all_nan_harrell_davis_gh24707s  s     _26JJ02661a.ABnnQAvA&ARZZ67nnQFvF+FRZZ(89:r5   )__name__
__module____qualname__rj   r~   skip_xp_backendsrb   markparametrizer   filterwarningsr   r   r!   r/   fullr   r   reshaper   r   r   r   r   r   r    r5   r3   rM   rM   K   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" t,M"(+!68;8;r5   rM   )ar   )vr   c                 2    t        j                  | ||      S )Nside)r!   searchsorted)r   r   r   s      r3   np_searchsortedr     s    ??1ad++r5   c            	       \   e Zd Z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y)Test_XPSearchsortedr   leftrighttiesFTrs   )r   r   r6   rl      i  i'  )r6   r   )r   r6   r6   rl   r6   rP   r  nans_xinfs_xc                 >   |r t        |      rt        j                  d       t        j                  j                  d      }|r|j                  d|      }n|j	                  |      }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         }|j                  t        j                  |
||	|fd      d      }|r'|j	                  |      d	k  }t        j                  ||<   |rO|j	                  |      d	k  }t        j                   ||<   |j	                  |      d
kD  }t        j                  ||<   t        j                   |d      }t        j                  |t        j"                        t        j                  |t        j"                        }}|j                  d      j$                  }t'        |      dk(  rS|j(                  dkD  rD|j                  d   dk7  r2|j+                  |j                  d d |j                  d   fz   |      }n|j                  t-        |||      |      }|j                  |      |j                  |      }}t/        |||      }t1        ||       y )Nztorch sorts NaNs differentlyl   %Dg hr   r   rn   rD   )rP   rE   r   g?r   r   r   )r
   rb   r   r!   r   r   rr   r-   r   	nextafterinfr/   broadcast_tors   ru   concatenater+   r   rm   r   rp   emptyr   r   r   )rg   r   r   rs   r  r  rh   ry   r   xrxlr|   r@   r   xp_default_intr   r2   s                    r3   test_ndzTest_XPSearchsorted.test_nd  sD    hrlKK67ii##$67QU+A

5!AJJq

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

1BJJ0O1A,,1:?qvvzaggbkQ.>((1773B<1772;.8(OC**_Q=^*TCzz!}bjjm1q!$/S!r5   N)r   r   r   rb   r   r   r  r   r5   r3   r   r     s    [[Vfg%67[[VeT]3[[W 'L M[[Xt}5[[Xt}5 " 6 6M 4 8 "r5   r   )r@   r   c                     t        j                  |       }|dk(  r9t        j                  |      r$t        j                  |t         j                        S |dk(  r| |    } t        j                  | |d|      S )Nr    r   T)rJ   r   )r!   r"   r.   r%   r/   r   estimated_cdf)r   r@   r0   r   i_nans        r3   !estimated_cdf_reference_last_axisr    s`    HHQKE[ RVVE]||Arvv&&	v	ufIq!d6BBr5   r    r   )rF   r0   rJ   r   c                   t        | |f|      \  } }t        j                  | |d      t        j                  ||d      }} t        | |||      }t        j                  |d|      }|st        j                  ||      }|S )NrE   rD   )r   r!   rG   r  rI   )r   r@   rF   r0   rJ   r   r2   s          r3   estimated_cdf_referencer    ss    aV$/DAq;;q$#R[[D"%=qA
+Aq*f
EC
++c2t
$Cjj4(Jr5   c                   	   e Zd Zd Zej
                  j                  de      ej
                  j                  dg d      ej
                  j                  dddg      ej
                  j                  dd	d
g      d                             Zej
                  j                  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      ej
                  j                  dddg      d                                                  Z
ej
                  j                  dd      ej
                  j                  ddd g      ej
                  j                  d! ej                               d"                      Zej
                  j                  dd	d
g      d#        Zd$ Zej
                  j                  dg d      ej
                  j                  de      d%               Zej
                  j                  dd&d'g      ej
                  j                  de      d(               Zej
                  j                  d)g d*ej(                  i fg d+d,d-ej(                  gd.d/ej(                  gi fg d+g g i fej(                  d0ggd0ej(                  d*gd'd1d2fg g gd* ej*                  d0ej(                        dd3ifg g gd* ej,                  d4      dd	d5fg g gd* ej,                  d6      dd
d5fg d*d7g ej*                  d0ej(                        i f ej.                  dd8      j1                  d9      d:d*gggdd
d5fdd0gd;d<ggg d=g d>gdd
d5fg d+ej2                   ej2                  gd.d/gi fej2                   d3ddej2                  gej2                   d?d3ddd0ej2                  gd@d@d@d*dAdAej(                  gddifej2                   d3ddej2                  gej2                   d?d3ddd0ej2                  gg dBddifg      dC        Zej
                  j                  dDdE      ej
                  j                  d ej8                               dF               Zy)GTestEstimatedCDFc                    |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        t        |      sZd}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   Mx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   |x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)NrO   r6   rQ   rR   TFrT   z`y` must have real dtype.y              ?r   rV   r   rE   rW   rX   rY   rZ   r[   zmethod` must be one of...r\   r   r^   r_   r`   zD`keepdims` may be False only if the length of `y` along `axis` is 1.ra   )r-   rb   rc   rd   r   r  r   r/   )rg   rh   r   r@   ri   s        r3   rj   z&TestEstimatedCDF.test_input_validation  s   JJy!JJqM-]]:W5 	>

D%= 91=	>]]:& 	:

D!9 5q9	: .]]:W5 	:2::tQi#89	: 7]]:W5 	013/	0]]:W5 	4173	4 L]]:W5 	.11-	. bz5Gz9 W##BJJ1~$>gVW .]]:W5 	71X6	7 D]]:W5 	31r2	3 Y]]:W5 	K2::sCj#9EJ	K 	KC	> 	>	: 	:	: 	:	0 	0	4 	4	. 	.
W W	7 	7	3 	3	K 	Ksx   (K1(K>(L%L!L%L2(5L?M M>*M$1K;>LLL"%L/2L<?M	MM!$M-r   x_shape)r6   rl   r  r   i  r  r  y_shapeN   r   FTc                    |t         v }t        |      }t        j                  j	                  d      }||n|}|r%|j                  |j                  d|      |      }	n#|j                  |j                  |      |      }	|j                  |j                  |      |      }
t        j                  |	|
|d      }t        j                  |	||d      }|j                  |
g |	j                  d d |j                  d         }|r|dz
  n|}t        j                  |	||d      }||j                  k(  rdnd	}t        |||
       |s|ry t        |   \  }}|	j                  d   }d|z
  |dz   |z
  |z
  z  }||z
  |dz   |z
  |z
  z  }||j!                  |	dd      k  }||j#                  |	dd      kD  }||k  | z  }||k\  | z  }||z  |z  |z   }t        ||   ||          t%        ddd      }t        ||   |j                  |      fi | t        ||   |j                  |      fi | t        ||   |j                  d      fi | t        ||   |j                  d      fi | y )Nl   S9UP+	   r   rn   rD   r   gư>gh㈵>g-q=)atolr   Tr   F)check_shapecheck_dtypecheck_0dr   r   )r   r   r!   r   r   r-   rr   standard_normalr   r,   r  r	  rs   r   r   r   minmaxr   )rg   r   r  r  r   rh   discontinuousrm   ry   r   r   r@   r2   r   y2r  r   brA   p_minp_max
i_very_lowi_very_highi_lowi_highi_okr   s                              r3   test_against_quantilez&TestEstimatedCDF.test_against_quantile  s   
 "FF $ii##$67$_''

3<<<8
FA

3..G.<E
JAJJszzwz/uJ=NN1aR8!!!QvB?ooa!=1773B<!=!=> *cDjs^^As6;

*tAD) = 181GGBKQ1q519q=)Q1q519q=)T::
"&&d&;;*,,;,.*,{:; 	D	3t9- %UTJE
BJJu$5@@FRZZ%6A&AJCCFCK("**S/DVDr5   r   rF   r   r   rJ   r0   )r    r   r   rm   r   r   nansmethr   r   c                 J   t        |      r|dk(  rt        j                  d       t        j                  j                  d      }d}	|j                  |	      j                  |      }
|j                  |	      j                  |      }d }|r?|j	                  |	      dkD  }t        j                  |      sJ t        j                  |
|<   |st        j                  ||d      }t        ||      }|dk(  rt        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 )Nr   r   r   r   r   r   Tr   r   r   r   r0   r   rn   r   )r   rb   r   r!   r   r   r"  re   r.   r/   r   r   r   r   r   r   r-   r   r  r  r   r(   )rg   rF   rJ   r0   rm   r0  r1  rh   ry   rs   r   r@   r   r   r   r   r   r2   r   s                      r3   r   z'TestEstimatedCDF.test_against_reference1  s    ":*0KKBCii##$56U+2259U+2259::5:)C/D66$<<ffAdGt4AE"!"KL((2FthtDF''+C;;qt;,D%%dCKKNEfEC)!QL6LVLCCHHbjjEj&BC4(!+D:!!"**Q-AI&I%a5f5RZZ5Z9:r5   torchzissues with sorting NaNs)r   rA   r   i  z
method, abc                 Z   |\  }}t         j                  j                  d      }|j                  |      }|j                  |      dk  }	t         j                  ||	<   |j                  |	      }	t         j                  j                  |      }
t        j                  j                  |
||      }|j                  |j                        }|j                  |      }t        j                  ||d|      }t        ||	    ||	           |j                  |j                  ||	               sJ y )Nl   \H|;r   r   r0   r   )r!   r   r   r"  r/   r-   mamasked_invalidr   r&   plotting_positionsr(   r  r   allr"   )rg   rA   r   abrh   r   r'  ry   r   r   x_maskedr   r2   s                r3   test_plotting_positionsz(TestEstimatedCDF.test_plotting_positions]  s     1ii##$67"zz!}s"&&$zz$55''*ll--h1=jj"JJqM!!!Q6&ITE
CJ/vvbhhs4y)***r5   c                    t         j                  j                  d      }d}t        |      }|r|j	                  d|      n|j                  |      }|r|j	                  dd      n|j                  d      }t        j                  |      j                  j                  |      }t        j                  ||d      }	|j                  ||      |j                  ||      }}t        j                  ||d	      }
|j                  ||      |j                  |	|      }	}t        |
|       t        |
|	d
z         y )Nl   mKJ^r   rl   r   r  weakrn   r   r   r   )r!   r   r   r   rr   r"  r   ecdfcdfevaluatepercentileofscorer-   r  r   )rg   r   rh   ry   rA   rm   r   r@   r   ref2r2   s              r3   #test_against_ecdf_percentileofscorez4TestEstimatedCDF.test_against_ecdf_percentileofscores  s   ii##$67 $(,CLL!L$#2E2E12E2M)-CLL"L%33F3FB3F3Ojjm((+&&q!V4zz!5z)2::au:+E1!!!Q~>JJs%J0"**T*2OTS!TCZ(r5   c                     |j                  d|j                        }t        j                  ||      }|j                  t        |      k(  sJ y )Nrl   rn   )r   r   r   r  rm   r   )rg   rh   r   r2   s       r3   r   z0TestEstimatedCDF.test_integer_input_output_dtype  sB    IIbI)!!!Q'yy,R0000r5   c                 2   |t         v }|j                  d      }|j                  g d      }t        |      rt	        j                  d      n|j                  d      }t	        j
                  dd      5  |r|j                  g d      }n8t        |   \  }	}
|j                  t        ||	z
  |dz   |	z
  |
z
  z        ddg      }d d d        |d	k(  r
|d d }d
d	i}n|dk(  r6t        j                  |      dd  j                  |j                        }d
di}n|dk(  rt        |      rt        j                  d       t        st        j                  d       t        j                   d      }|j#                  |      }|dkD  }|j                  ||      }|j                  |      }i }t	        j
                  dd      5  t%        j&                  ||fd|i}d d d        |dk(  rj(                  n}t+        |       y # 1 sw Y   >xY w# 1 sw Y   6xY w)N      $@r   g      r   r   ignoredivideinvalid)r   r   r   r   r   r    r0   r   r   (JAX currently incompatible with `marray`r   r   r   )r   r   r-   r   r!   errstater   floatxpxatsetr/   r   rb   r   r   r   r   r   r  r(   r   )rg   r0   r   rh   r%  r   r@   rA   r   r   r'  r   r   r   r   r2   s                   r3   test_size_one_samplez%TestEstimatedCDF.test_size_one_sample  s    "FFIIcNJJ}%1"5BJJrN2::b>[[(; 	Mjj.8@1jj%Q1q519q=(A"BB!KL	M $"1A"K0F6!q	!"!!"&&)A"F+F8#bzFG"KL((2F''+CFDAD)AAAF[[(; 	E%%aD6DVDC	E$0chhcS!9	M 	M2	E 	Es   5AH >H H
Hr    r   c                 "   |j                  d      }|j                  g d      }|j                  ||j                        }|dk(  r
|dd }ddi}n|dk(  r6t	        j
                  |      d d  j                  |j                        }ddi}n|dk(  rt        st        j                  d       t        |      rt        j                  d	       t        j                  d      }|j                  |      }	|d
k\  }
|	j                  ||
      }|	j                  |      }i }t        j                  dd      5  t        j                   ||fd|i}d d d        |dk(  r|j#                  j$                        sJ y t'        |       y # 1 sw Y   9xY w)NrG  rH  r    r   r0   r   r   r   rM  r   r   rI  rJ  r   )r   r-   r%   r/   rP  rQ  rR  r   rb   r   r   r   r   r!   rN  r   r  r9  r   r   )rg   r0   r   rh   r   r@   r   r   r   r   r   r2   s               r3   test_size_zero_samplez&TestEstimatedCDF.test_size_zero_sample  sh    IIcNJJ}%ll1bff%$!AA"K0F6!q	!  (A"F+F8#"KLbzFG((2F''+CGDAD)AAAF[[(; 	E%%aD6DVDC	E !66#((###C%	E 	Es   3FFzx, y, ref, kwargsr   rO   g+?g5^I@r   r   r6   r   r5  rD   r   r   r   ra   r   r   r   rP   r   r   r   r   r   r   )皙?rV  g?ra   r   r   r   c                    |j                  dd       dk(  r t        |      rt        j                  d       |j                  dd       dk(  r t	        |      rt        j                  d       t        |      }|j                  |      |j                  |      |j                  ||      }}}t        j                  ||fi |}t        ||d	       y )
Nr   r   zdata-apis/array-api-compat#360rF   rD   zFails; need to investigate.rn   gV瞯<)rtol)
getr
   rb   r   r   r   r-   r   r  r   )rg   r   r@   r   r   rh   r   r2   s           r3   r   z TestEstimatedCDF.test_edge_cases  s    > ::h%2x|KK89::fd#r)gbkKK56(,JJqM2::a="**S*2Vc1!!!Q1&1Su-r5   r   z-1e-45 is not less than 0?c                    t        j                  dt         j                        }t        j                  |t         j                         t        j                  |t         j                        }}|dk(  rdnd}|dz   |z   dz  }d|d	<   ||z   dz  }d|d
<   |j                  |      |j                  |      |j                  |      }}}|j                  |      |j                  |      }}t        t        j                  |||      |       t        t        j                  |||      |       t        t        j                  |||      |       y )Nr   rn   r   r   r   r      r   rD   r   r   )	r!   r   r   r  r  r-   r   r   r  )	rg   r   rh   r   r  r  offsetref_rref_ls	            r3   r   z TestEstimatedCDF.test_transition  s   
 IIb

+a"&&)2<<266+BB"77SQ1$b	Vq aJJqM2::b>2::b>r2zz%("**U*;u++Aq@%H++Ar&A5I++Ar&A5Ir5   )r   r   r   rj   rb   r   r   _estimated_cdf_methods_listr/  r   r   r   r   itemsr<  rD  r   rS  rU  r!   r/   r   r   r   r   r  r   r   keysr   r   r5   r3   r  r    s   'KR [[X'BC[[Y(ST[[Yr
3[[VeT]31E 4 4 U D1Ef [[ GH[[VaV,[[Z%7[[\+JK[[Wy)&<=[[VeT]3[[Vh%?@#; A 4 > L 8 - I#;J [[!!'2L!M[[S2s),[[\+R+L+R+R+TU+ V - N+& [[VeT]3) 4)1
 [[\+JK[[X'BC!" D L!"H [[\K+@A[[X'BC& D B&> [[0
c2662	
eUBFF+b"bff-=r	B
RR	 FFA;-RVVSM&I+V	W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
*
,
rvvgrvv&c
B	7 FF7B1bff
%RAq"&&'ItS4rvv
6(8K
MFF7B1bff
%RAq"&&'I
,x.H
J5	
<.=<. [[!!+6R!S[[X'P'K'P'P'RSJ T TJr5   r  )2rb   numpyr!   scipyr   scipy.stats._quantiler   r   r   r   scipy._lib._array_apir   r	   r
   r   r   r   r   r   r   r   scipy._lib._array_api_no_0dr   r   scipy._lib._utilr   scipy._external.array_api_extra	_externalarray_api_extrarP  scipy.stats._axis_nan_policyr   r   r   lazy_xp_modulesr4   	vectorizer*   rK   r,   rM   r   r   r  r  sortedlistr_  r  r  r   r5   r3   <module>rp     s_     M M   I . - - :;;// '8X& '. 1v
 
 5>>"w; w; #w;t	 8X&, ', #$'" '" %'"T 8X&C 'C +,!%h %T*@%AB  5&&'vJ vJ (vJr5   