o
    þ0GfF  ã                   @   s:   d dl Zddd„Zddd„Zdd„ Zdd	„ Zdd
d„ZdS )é    Nc                 C   s<   |du rt | ƒ}tj | |¡| }tj|j|dd… jf S )z:
    RFFT with order like Munro (1976) FORTT routine.
    Né   éÿÿÿÿ)ÚlenÚnpÚfftZrfftÚr_ÚrealÚimag)ÚXÚmÚy© r   úBlib/python3.10/site-packages/statsmodels/nonparametric/kdetools.pyÚforrt   s   r   c                 C   sX   |du rt | ƒ}t|d d ƒ}| d|… tjd| |d… df d  }tj |¡| S )zE
    Inverse of forrt. Equivalent to Munro (1976) REVRT routine.
    Né   r   r   y              ð?)r   Úintr   r   r   Zirfft)r
   r   Úir   r   r   r   Úrevrt   s
   (r   c           	      C   s|   t  |d d ¡}dt j|  | d  }|d | }dd|d | t j d   }t  | ¡| }t j||dd… f }|S )z€
    FFT of Gaussian kernel following to Silverman AS 176.

    Notes
    -----
    Underflow is intentional as a dampener.
    r   r   gUUUUUUÕ?g      ð?r   )r   ZarangeZpiZexpr   )	ZbwÚMÚRANGEÚJZFAC1ZJFACZBCZFACZkern_estr   r   r   Úsilverman_transform   s   r   c              
   C   sV   t  | |¡}z
t j|t|ƒdW S    t  |¡}t j|t  t|ƒt|ƒ ¡f  Y S )zŠ
    Counts the number of elements of x that fall within the grid points v

    Notes
    -----
    Using np.digitize and np.bincount
    )Z	minlength)r   ZdigitizeZbincountr   r   Zzeros)ÚxÚvÚidxZbcr   r   r   Úcounts'   s   
$r   c                    s"   t  ‡ ‡fdd„ttˆƒƒD ƒ¡S )Nc                    s    g | ]}t  ˆ| ˆ ˆ ¡‘qS r   )r   Úsum)Ú.0r   ©Úaxisr   r   r   Ú
<listcomp>7   s     zkdesum.<locals>.<listcomp>)r   ZasarrayÚranger   )r   r   r   r   r   Úkdesum6   s   "r"   )N)r   )Znumpyr   r   r   r   r   r"   r   r   r   r   Ú<module>   s   

	
