a
    Qe                     @   s\   d dl Z d dlZd dlmZ d dlmZ dd Zdd Zdd	 Z	d
d Z
dd Zdd ZdS )    N)special)primes_from_2_toc                 C   s   t t| S N)r   mathceil)n r   O/var/www/sunrise/env/lib/python3.9/site-packages/scipy/stats/tests/data/_mvt.py_primes   s    r
   c                 C   s   t || S r   )r   Zgammaincinv)abr   r   r	   _gaminv   s    r   c                  C   sZ  t dt|}t||| || \}}}	t|}
d}t| | }t|}d}d}ttd|
 t	|
d  d }|ddtj
f }d}d}t|D ]}| }t|
|f}t|
D ]H}tdt|| td|d  |  d d }|dkr.|}|dkrjtdt||d  }n<t|||  }||d  ||d|d |f | 7  < ||ddf }| }|| | | }| }|	| | | }d||dk< t|d	k }t|| ||< d||dk< t|d	k }t|| ||< || }|| }qt|| |d  }|| }|d | |d  |d  }qt|}||fS )
a  Estimates the multivariate t CDF using randomized QMC

    Parameters
    ----------
    m : int
        The number of points
    nu : float
        Degrees of freedom
    sigma : ndarray
        A 2D positive semidefinite covariance matrix
    a : ndarray
        Lower integration limits
    b : ndarray
        Upper integration limits.
    rng : Generator
        Pseudorandom number generator

    Returns
    -------
    p : float
        The estimated CDF.
    e : float
        An absolute error estimate.

       
   r         N   i	   )maxr   sqrt_chlrpslenr   npZonesr
   logZnewaxisrangecopyzerosabsmodZarangerandomr   _Phinv_Phimean) mnusigmar   r   rngZsnchazZbzr   NPonpeZpsqcdcSZvpsixrysiaidbitlr   r   r	   _qsimvtv   s*    H*,66

,@((<
r<   c                 C   s
   t | S r   )r   Zndtr)zr   r   r	   r!   w   s    r!   c                 C   s
   t | S r   )r   Zndtri)r,   r   r   r	   r    {   s    r    c                 C   sx  d}t | jj}t| }|  }| }| }t t t |d}	t	|D ]p}
|	|
 dkrR|dd|
f  |	|
   < ||
ddf  |	|
   < ||
  |	|
   < ||
  |	|
   < qRt 
|df}tdtj }t	|D ]}|}d}d}d}t	||D ]}
||
|
f |kr
tt||
|
f d}|
dkr^||
d|f |d|  }||
 | | }||
 | | }t|t| }||kr
|}|}|}|}|
}q
||kr|||g |||g< |||g |||g< |||f |||f< ||d|f  }||d|f ||d|f< |||d|f< ||d d|f  }||d d|f ||d d|f< |||d d|f< ||d ||f  }|||d |f j||d ||f< |j|||d |f< |||d  krD||||f< d|||d df< t	|d |D ]p}
||
|f | ||
|f< ||
|d |
d f ||
|f ||d |
d |f j  ||
|d |
d f< qt||krt |d  d t |d  d  ||  ||< n6|| d ||< |dk r|||< n|dkr|||< ||d|d f  |  < ||  |  < ||  |  < qd||d|f< || ||  d ||< q|||fS )z
    Computes permuted and scaled lower Cholesky factor c for R which may be
    singular, also permuting and scaling integration limit vectors a and b.
    g|=r   Nr   r   ir   )r   ZfinfoZdtypeepsr   r   r   maximumZdiagr   r   r   pir   r!   Tr   exp)Rr   r   epr>   r   r/   ZapZbpr9   r3   r6   ZsqtpkZimZckkZdemr2   Zciir8   r:   deamZbmtr   r   r	   r      sJ    88*&0

<@PT n6


>(r   )r   numpyr   Zscipyr   Zscipy.stats._qmcr   r
   r   r<   r!   r    r   r   r   r   r	   <module>   s   c