
    Ui                         d dl Zd dlmZ d dlmZmZmZ d dlm	Z	 dgZ
d Zd Zd Zd	 Z e	ed
dedd          d dddd            ZdS )    N)stats)_SimpleNormalSignificanceResult_get_pvalue)_axis_nan_policy_factorychatterjeexic                    | j         d         }t          j        | d          }t          j        ||          \  }}t          j        ||d          }t          j        |dd          }t          j        | dd          }t          j        t          j        t          j	        |d                    d          }|rdd|z  |dz  dz
  z  z
  }n*dt          j        ||z
  |z  d          z  }	d||z  |	z  z
  }|||fS )Naxismax)methodr            )
shapenpargsortbroadcast_arraystake_along_axisr   rankdatasumabsdiff)
xyy_continuousnjrlnum	statisticdens
             p/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/scipy/stats/_correlation.py_xi_statisticr&      s    	
A 	
12Aq!$$DAq
1ab)))A 	qR000A 	r%b111A
&+++,,2
6
6
6C &C16A:..		"&!a%12....C#%	a?    c                    t          j        | j        d                   }|r)t          j        d          t          j        |          z  S t          j        d|dz             }t          j        | d          }t          j        |d          }d|dz  z  t          j        d|z  d|z  z
  dz   |dz  z  d          z  }d|dz  z  t          j        |||z
  |z  z   dz  d          z  }d|dz  z  t          j        d|z  d|z  z
  dz   |z  d          z  }	d|dz  z  t          j        |||z
  z  d          z  }
|d|z  z
  |	dz  z   |
dz  z  }t          j        |          t          j        |          z  S )	Nr
   g?r   r      r      r   )r   float64r   sqrtarangesortcumsumr   )r    r!   r   r   iuvanbncndntau2s               r%   _xi_stdr8   *   s    	
172;A  +wu~~

**
 		!QUA
A
	!"A	
QTBFAaC!A#IMQT1;;;	;B	
QTBFAQ	MA-B777	7B	
QTBFAaC!A#IMQ.R888	8B	
QTBFAQKr222	2B2IAQ&D74==271::%%r'   c                     | dvrt          d          t          |t          j                  s+|                                }d}|dk    rt          |          | |fS )N>   FTz`y_continuous` must be boolean.z@`method` must be 'asymptotic' or a `PermutationMethod` instance.
asymptotic)
ValueError
isinstancer   PermutationMethodlower)r   r   messages      r%   _chatterjeexi_ivr@   D   si     =((:;;;fe566 &T\!!W%%%r'   c                     | j         | j        fS )N)r#   pvalue)res_s     r%   _unpackrE   T   s    =#*$$r'   Tr   r   )paired	n_samplesresult_to_tuple	n_outputs	too_smallFr:   )r   r   r   c                    t          |          \  }d}|dk    rJt           |          \  }}}t          ||          }	t                      }
t	          ||	z  |
|          }nYt          |t          j                  r?t          j        d	|f fd|dd|	                                ddi}|j
        |j        }}t          ||          S )
a  Compute the xi correlation and perform a test of independence

    The xi correlation coefficient is a measure of association between two
    variables; the value tends to be close to zero when the variables are
    independent and close to 1 when there is a strong association. Unlike
    other correlation coefficients, the xi correlation is effective even
    when the association is not monotonic.

    Parameters
    ----------
    x, y : array-like
        The samples: corresponding observations of the independent and
        dependent variable. The (N-d) arrays must be broadcastable.
    axis : int, default: 0
        Axis along which to perform the test.
    method : 'asymptotic' or `PermutationMethod` instance, optional
        Selects the method used to calculate the *p*-value.
        Default is 'asymptotic'. The following options are available.

        * ``'asymptotic'``: compares the standardized test statistic
          against the normal distribution.
        * `PermutationMethod` instance. In this case, the p-value
          is computed using `permutation_test` with the provided
          configuration options and other appropriate settings.

    y_continuous : bool, default: False
        Whether `y` is assumed to be drawn from a continuous distribution.
        If `y` is drawn from a continuous distribution, results are valid
        whether this is assumed or not, but enabling this assumption will
        result in faster computation and typically produce similar results.

    Returns
    -------
    res : SignificanceResult
        An object containing attributes:

        statistic : float
            The xi correlation statistic.
        pvalue : float
            The associated *p*-value: the probability of a statistic at least as
            high as the observed value under the null hypothesis of independence.

    See Also
    --------
    scipy.stats.pearsonr, scipy.stats.spearmanr, scipy.stats.kendalltau

    Notes
    -----
    There is currently no special handling of ties in `x`; they are broken arbitrarily
    by the implementation.

    [1]_ notes that the statistic is not symmetric in `x` and `y` *by design*:
    "...we may want to understand if :math:`Y` is a function :math:`X`, and not just
    if one of the variables is a function of the other." See [1]_ Remark 1.

    References
    ----------
    .. [1] Chatterjee, Sourav. "A new coefficient of correlation." Journal of
           the American Statistical Association 116.536 (2021): 2009-2022.
           :doi:`10.1080/01621459.2020.1758115`.

    Examples
    --------
    Generate perfectly correlated data, and observe that the xi correlation is
    nearly 1.0.

    >>> import numpy as np
    >>> from scipy import stats
    >>> rng = np.random.default_rng(348932549825235)
    >>> x = rng.uniform(0, 10, size=100)
    >>> y = np.sin(x)
    >>> res = stats.chatterjeexi(x, y)
    >>> res.statistic
    np.float64(0.9012901290129013)

    The probability of observing such a high value of the statistic under the
    null hypothesis of independence is very low.

    >>> res.pvalue
    np.float64(2.2206974648177804e-46)

    As noise is introduced, the correlation coefficient decreases.

    >>> noise = rng.normal(scale=[[0.1], [0.5], [1]], size=(3, 100))
    >>> res = stats.chatterjeexi(x, y + noise, axis=-1)
    >>> res.statistic
    array([0.79507951, 0.41824182, 0.16651665])

    Because the distribution of `y` is continuous, it is valid to pass
    ``y_continuous=True``. The statistic is identical, and the p-value
    (not shown) is only slightly different.

    >>> stats.chatterjeexi(x, y + noise, y_continuous=True, axis=-1).statistic
    array([0.79507951, 0.41824182, 0.16651665])

    greaterr:   )alternativec                 2    t          |           d         S )Nr   )r&   )r   r   r   r   s     r%   <lambda>zchatterjeexi.<locals>.<lambda>   s    q!\1R1RST1U r'   pairings)datar#   rM   permutation_typer   r
    )r@   r&   r8   r   r   r<   r   r=   permutation_test_asdictr#   rB   r   )r   r   r   r   r   rM   xir    r!   stdnormrB   rC   s   `  `         r%   r   r   X   s   J ,L&AAL&
 K A|44AqaL))R#XtEEE	FE3	4	4 /$ !U!U!U!U!U#j  EKNNDTDT  	   ]CJFb&)))r'   )numpyr   scipyr   scipy.stats._stats_pyr   r   r   scipy.stats._axis_nan_policyr   __all__r&   r8   r@   rE   r   rS   r'   r%   <module>r^      s              P P P P P P P P P P A A A A A A 
  8& & &4      % % % ,TQ*1Q!M M M u\ x* x* x* x*M Mx* x* x*r'   