Ë
    ÏÍ:j,  ã                   ó”   — d dl Z d dlZd dlmZmZmZmZmZ d dl	m
c mZ ddlmZ  ed¬«       ed„ dd„ ¬	«      dd
dœd„«       «       Zy)é    N)Úarray_namespaceÚxp_capabilitiesÚ	xp_deviceÚ_count_nonmaskedÚ
xp_promoteé   )Ú_axis_nan_policy_factoryT)Úmarrayc                 ó   — | S ©N© )Úxs    úk/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/scipy/stats/_variation.pyú<lambda>r      s   € ˆa€ ó    c                 ó   — | fS r   r   )r   Ú_s     r   r   r      s   € ¸A¸4€ r   )Ú	n_outputsÚresult_to_tupleF)Úkeepdimsc                óx  — t        | «      }t        | d|¬«      } |€|j                  | d«      } d}|j                  t	        | |¬«      | j
                  t        | «      ¬«      }t        j                  dd¬	«      5  t        j                  «       5  t        j                  d«       |j                  | |¬«      }|j                  | |¬«      }|||z
  z  d
z  }	||	z  |z  }
ddd«       ddd«       d„ }t        j                  ||k(  f|
¬«      }
|
j                   dk(  r|
d   S |
S # 1 sw Y   ŒHxY w# 1 sw Y   ŒLxY w)a{  
    Compute the coefficient of variation.

    The coefficient of variation is the standard deviation divided by the
    mean.  This function is equivalent to::

        np.std(x, axis=axis, ddof=ddof) / np.mean(x)

    The default for ``ddof`` is 0, but many definitions of the coefficient
    of variation use the square root of the unbiased sample variance
    for the sample standard deviation, which corresponds to ``ddof=1``.

    The function does not take the absolute value of the mean of the data,
    so the return value is negative if the mean is negative.

    Parameters
    ----------
    a : array_like
        Input array.
    axis : int or None, optional
        Axis along which to calculate the coefficient of variation.
        Default is 0. If None, compute over the whole array `a`.
    nan_policy : {'propagate', 'raise', 'omit'}, optional
        Defines how to handle when input contains ``nan``.
        The following options are available:

        * 'propagate': return ``nan``
        * 'raise': raise an exception
        * 'omit': perform the calculation with ``nan`` values omitted

        The default is 'propagate'.
    ddof : int, optional
        Gives the "Delta Degrees Of Freedom" used when computing the
        standard deviation.  The divisor used in the calculation of the
        standard deviation is ``N - ddof``, where ``N`` is the number of
        elements.  `ddof` must be less than ``N``; if it isn't, the result
        will be ``nan`` or ``inf``, depending on ``N`` and the values in
        the array.  By default `ddof` is zero for backwards compatibility,
        but it is recommended to use ``ddof=1`` to ensure that the sample
        standard deviation is computed as the square root of the unbiased
        sample variance.

    Returns
    -------
    variation : ndarray
        The calculated variation along the requested axis.

    Notes
    -----
    There are several edge cases that are handled without generating a
    warning:

    * If both the mean and the standard deviation are zero, ``nan``
      is returned.
    * If the mean is zero and the standard deviation is nonzero, ``inf``
      is returned.
    * If the input has length zero (either because the array has zero
      length, or all the input values are ``nan`` and ``nan_policy`` is
      ``'omit'``), ``nan`` is returned.
    * If the input contains ``inf``, ``nan`` is returned.

    References
    ----------
    .. [1] Zwillinger, D. and Kokoska, S. (2000). CRC Standard
       Probability and Statistics Tables and Formulae. Chapman & Hall: New
       York. 2000.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.stats import variation
    >>> variation([1, 2, 3, 4, 5], ddof=1)
    0.5270462766947299

    Compute the variation along a given dimension of an array that contains
    a few ``nan`` values:

    >>> x = np.array([[  10.0, np.nan, 11.0, 19.0, 23.0, 29.0, 98.0],
    ...               [  29.0,   30.0, 32.0, 33.0, 35.0, 56.0, 57.0],
    ...               [np.nan, np.nan, 12.0, 13.0, 16.0, 16.0, 17.0]])
    >>> variation(x, axis=1, ddof=1, nan_policy='omit')
    array([1.05109361, 0.31428986, 0.146483  ])

    T)Úforce_floatingÚxpN)éÿÿÿÿr   )Úaxis©ÚdtypeÚdeviceÚignore)ÚdivideÚinvalidg      à?c                 óÜ   — t        | |«      }|j                  |j                  |j                  t	        |«      ¬«      }|j                  | dkD  |j                  ||«      |j                  «      S )Nr   r   )r   ÚasarrayÚinfr   r   ÚwhereÚcopysignÚnan)Ústd_aÚmean_aÚmxpÚ_xp_infs       r   Úspecial_casezvariation.<locals>.special_casez   sW   € ä˜e VÓ,ˆð —+‘+˜cŸg™g¨V¯\©\Ä)ÈFÓBS�+ÓTˆØ�y‰y˜ ™ C§L¡L°¸&Ó$AÀ3Ç7Á7ÓKÐKr   )Ú
fill_valuer   )r   r   Úreshaper#   r   r   r   ÚnpÚerrstateÚwarningsÚcatch_warningsÚsimplefilterÚmeanÚstdÚxpxÚapply_whereÚndim)Úar   Ú
nan_policyÚddofr   r   Únr)   r(   Ú
correctionÚresultr,   s               r   Ú	variationr?      s7  € ôr 
˜Ó	€BÜ�1 T¨bÔ1€Að €|Ø�J‰J�q˜%Ó ˆØˆà
�
‰
Ô# A¨DÔ1¸¿¹ÌÐSTËˆ
ÓV€Aä
�+‰+˜X¨xÔ
8ñ -¼(×:QÑ:QÓ:Sñ -Ü×Ñ˜hÔ'Ø—‘˜ �Ó&ˆØ—‘�q˜t�Ó$ˆØ˜1˜t™8‘n sÑ*ˆ
Ø˜Ñ# fÑ,ˆ÷-÷ -òLô �_‰_˜d a™i¨5°&¨/Ø)°fô>€Fð  Ÿ™¨Ò)ˆ6�"‰:Ð5¨vÐ5÷%-ð -ú÷ -ð -ús%   Á9D0ÂAD$ÃD0Ä$D-	Ä)D0Ä0D9)r   Ú	propagater   )r1   Únumpyr/   Úscipy._lib._array_apir   r   r   r   r   Úscipy._external.array_api_extraÚ	_externalÚarray_api_extrar6   Ú_axis_nan_policyr	   r?   r   r   r   ú<module>rG      sX   ðÛ Û ÷õ ÷ .Ð -å 6ñ ˜ÔÙÙ˜1Ñ.?ôðq6ÀUó q6óó ñq6r   