L ij4~ddlZddlmZddlmZmZmZddlm cm Z ddl m Z mZddlmZdZddddd d Zd Zd Zy) N)betainc)xp_ravelarray_namespace xp_promote)_broadcast_arrays _contains_nan)_length_nonmaskedc Zt||}|j|j|jds t d|j|j|jds t dt ||d|\}}|j}|du}t |j|j} |rt|}t|}d}nHtj|st||k7r d} t | || k\s|| kr d } t | t|}hd } || vrd | } t | t||d| } |d vr d} t | |j|dk(rGt|j} d| |<|j| |j|j |}|j#||}t%||f|\}}|dur|j|dk7r d} t | ||j|dk7n|}|j'||d}|j'||d}t)|d|d}|j||}| rW|j+|}|dk(r|j-|d}n|j/||j0}|j3|dd}|j/||}|j-|dk(d}t5j6||j9|jd}|j-|rC|j|d}t5j6||j9|j }nN|j-|r=|dk(r8|j|d}t5j6||j9d}|dkD|dkz|j+|z}|j-|r8|j|d}t5j6||j9d}||||||||| ||f S)N)integral real floatingz`x` must have real dtype.r z"`p` must have real floating dtype.T)force_floatingxprz"`axis` must be an integer or None.z7`axis` is not compatible with the shapes of the inputs.> hazenlinearweibull inverted_cdfmedian_unbiasednormal_unbiasedclosest_observationaveraged_inverted_cdfinterpolated_inverted_cdf harrell-davisz`method` must be one of ) xp_omit_okayr>FNTz/If specified, `keepdims` must be True or False.dtypeaxisFzD`keepdims` may be False only if the length of `p` along `axis` is 1.)rkeepdims propagate)rr )copyr?)risdtypeasarrayr ValueErrorrmaxndimrnpiterableintrshapelistfullnansortrmoveaxisr isnananyastypeuint64sumxpxatset)xpmethodr nan_policyr rr axis_noner(messagemethods contains_nansr,ynnansnan_outnon_nann_intp_masks [/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/stats/_quantile.py _quantile_ivrJ s A B ::bjjm))+H I455 ::bjjm))? ;=>> a4B 7DAq GGE I qvvqvv D QK QK T c$i4/6!! $,DD5LK!! t9D GW,WI6!!!!ZdrJM**C!!  wwt}QWW d GGE2::bffE:: ; A aV$ /DAqE  2X!!'/'7 "XH AtR A AtR A!RB6A 1E "Axx{  $ffTf+Giiryy1GFF7dF;E %'AffQ!V"f-Gq'"&&qwwr{3A 66'? 14 (Aq'"&&rvv.A VVD\f7 14 (Aq$##A&A!eA ! ,F vvf~ JJqtJ $ FF1f  ! !# & az8Q 4QS SSrr!)r<rr=r c t||||||}|\ }}}}}}}} } } } |dvrt||||| } n|dvrt|||| } tj | j | j } | r+|r)d| dz z| jz}| j| |} d}| j| d|} |s| j| |} | jdk(r| dS| S) a Compute the p-th quantile of the data along the specified axis. Parameters ---------- x : array_like of real numbers Data array. p : array_like of float Probability or sequence of probabilities of the quantiles to compute. Values must be between 0 and 1 (inclusive). Must have length 1 along `axis` unless ``keepdims=True``. method : str, default: 'linear' The method to use for estimating the quantile. The available options, numbered as they appear in [1]_, are: 1. 'inverted_cdf' 2. 'averaged_inverted_cdf' 3. 'closest_observation' 4. 'interpolated_inverted_cdf' 5. 'hazen' 6. 'weibull' 7. 'linear' (default) 8. 'median_unbiased' 9. 'normal_unbiased' 'harrell-davis' is also available to compute the quantile estimate according to [2]_. See Notes for details. axis : int or None, default: 0 Axis along which the quantiles are computed. ``None`` ravels both `x` and `p` before performing the calculation, without checking whether the original shapes were compatible. nan_policy : str, default: 'propagate' Defines how to handle NaNs in the input data `x`. - ``propagate``: if a NaN is present in the axis slice (e.g. row) along which the statistic is computed, the corresponding slice of the output will contain NaN(s). - ``omit``: NaNs will be omitted when performing the calculation. If insufficient data remains in the axis slice along which the statistic is computed, the corresponding slice of the output will contain NaN(s). - ``raise``: if a NaN is present, a ``ValueError`` will be raised. If NaNs are present in `p`, a ``ValueError`` will be raised. keepdims : bool, optional Consider the case in which `x` is 1-D and `p` is a scalar: the quantile is a reducing statistic, and the default behavior is to return a scalar. If `keepdims` is set to True, the axis will not be reduced away, and the result will be a 1-D array with one element. The general case is more subtle, since multiple quantiles may be requested for each axis-slice of `x`. For instance, if both `x` and `p` are 1-D and ``p.size > 1``, no axis can be reduced away; there must be an axis to contain the number of quantiles given by ``p.size``. Therefore: - By default, the axis will be reduced away if possible (i.e. if there is exactly one element of `q` per axis-slice of `x`). - If `keepdims` is set to True, the axis will not be reduced away. - If `keepdims` is set to False, the axis will be reduced away if possible, and an error will be raised otherwise. Returns ------- quantile : scalar or ndarray The resulting quantile(s). The dtype is the result dtype of `x` and `p`. Notes ----- Given a sample `x` from an underlying distribution, `quantile` provides a nonparametric estimate of the inverse cumulative distribution function. By default, this is done by interpolating between adjacent elements in ``y``, a sorted copy of `x`:: (1-g)*y[j] + g*y[j+1] where the index ``j`` and coefficient ``g`` are the integral and fractional components of ``p * (n-1)``, and ``n`` is the number of elements in the sample. This is a special case of Equation 1 of H&F [1]_. More generally, - ``j = (p*n + m - 1) // 1``, and - ``g = (p*n + m - 1) % 1``, where ``m`` may be defined according to several different conventions. The preferred convention may be selected using the ``method`` parameter: =============================== =============== =============== ``method`` number in H&F ``m`` =============================== =============== =============== ``interpolated_inverted_cdf`` 4 ``0`` ``hazen`` 5 ``1/2`` ``weibull`` 6 ``p`` ``linear`` (default) 7 ``1 - p`` ``median_unbiased`` 8 ``p/3 + 1/3`` ``normal_unbiased`` 9 ``p/4 + 3/8`` =============================== =============== =============== Note that indices ``j`` and ``j + 1`` are clipped to the range ``0`` to ``n - 1`` when the results of the formula would be outside the allowed range of non-negative indices. When ``j`` is clipped to zero, ``g`` is set to zero as well. The ``-1`` in the formulas for ``j`` and ``g`` accounts for Python's 0-based indexing. The table above includes only the estimators from [1]_ that are continuous functions of probability `p` (estimators 4-9). SciPy also provides the three discontinuous estimators from [1]_ (estimators 1-3), where ``j`` is defined as above, ``m`` is defined as follows, and ``g`` is ``0`` when ``index = p*n + m - 1`` is less than ``0`` and otherwise is defined below. 1. ``inverted_cdf``: ``m = 0`` and ``g = int(index - j > 0)`` 2. ``averaged_inverted_cdf``: ``m = 0`` and ``g = (1 + int(index - j > 0)) / 2`` 3. ``closest_observation``: ``m = -1/2`` and ``g = 1 - int((index == j) & (j%2 == 1))`` A different strategy for computing quantiles from [2]_, ``method='harrell-davis'``, uses a weighted combination of all elements. The weights are computed as: .. math:: w_{n, i} = I_{i/n}(a, b) - I_{(i - 1)/n}(a, b) where :math:`n` is the number of elements in the sample, :math:`i` are the indices :math:`1, 2, ..., n-1, n` of the sorted elements, :math:`a = p (n + 1)`, :math:`b = (1 - p)(n + 1)`, :math:`p` is the probability of the quantile, and :math:`I` is the regularized, lower incomplete beta function (`scipy.special.betainc`). Examples -------- >>> import numpy as np >>> from scipy import stats >>> x = np.asarray([[10, 8, 7, 5, 4], ... [0, 1, 2, 3, 5]]) Take the median along the last axis. >>> stats.quantile(x, 0.5, axis=-1) array([7., 2.]) Take a different quantile along each axis. >>> stats.quantile(x, [[0.25], [0.75]], axis=-1, keepdims=True) array([[5.], [3.]]) Take multiple quantiles along each axis. >>> stats.quantile(x, [0.25, 0.75], axis=-1) array([[5., 8.], [1., 3.]]) References ---------- .. [1] R. J. Hyndman and Y. Fan, "Sample quantiles in statistical packages," The American Statistician, 50(4), pp. 361-365, 1996 .. [2] Harrell, Frank E., and C. E. Davis. "A new distribution-free quantile estimator." Biometrika 69.3 (1982): 635-640. > rrrrrrrrr>r)rrrrr) rJ _quantile_hf _quantile_hdr7r8r9r/r,reshaper1squeezer()r:r;r<rr=r temprBrCr>r(rHrresr,s rIquantilerTdsR 1fdJ ADOSLAq&$ HaD&" CC1aFB/ $ $1aB' &&f  ! !"&& )CXdQh#))+jje$ ++c2t $C jj4j(hh!m3r7,,rKc 0tddddd|d|z |dz dz|dz dz }||}||z|zdz }|dz}|dz} |d k(r |j| dkD|j} n[|d k(r&d|j| dkD|jzd z } n0|d k(r+d|j| dk(|d zdk(z|jz } |dvr9|j| } t j | |dkj d} d| |dk<|j|d|dz }|j|dzd|dz } d| z |j||j||jdz| |j||j| |jdzzS)Nrgr#rgUUUUUU?g?) rrrrrrrrrrrr>rrrgrr) dictr4rr%r7r8r9cliptake_along_axisint64) rBr;rCr<rmsmjgjgjp1s rIrNrN's 1A4()aAcCi1s DB 6 A 1q1B aA QA  IIq1urxx ( * * AEBHH- - 2 ( ( AFq1uz2BHH= = QQ JJqM FF1b1f  ! !! $Aa!eH 2q1uA ''!a%QU #C Ub((BIIa,B(L L"$$Q #rxx(@r$JJ KLrKc|j|ddd|jf}||dzz}d|z |dzz}|j|jddz|j}t ||||z }|dddf|dddfz }t j||j|jd}|j||d}|j|ddS)Nrr.rrr) r1newaxisaranger,rrr7r8r2r9vecdot) rBr;rCrabiwrSs rIrOrOAs Ar1c2::o.A QU A Q1q5A !''"+/ 1A1a!eA #qr' QsCRCx[ A q"((1+""1%A ))Aqr) "C ;;sAr ""rK)numpyr) scipy.specialrscipy._lib._array_apirrrscipy._lib.array_api_extra_libarray_api_extrar7scipy.stats._axis_nan_policyrrscipy.stats._stats_pyr rJrTrNrOrMrKrIrssC!GG((I3XTv&A+PT@-FL4#rK