
    M/PhF                     2    d dl ZddZddZd Zd ZddZdS )	    Nc                     |t          |           }t          j                            | |          |z  }t          j        |j        |dd         j        f         S )z:
    RFFT with order like Munro (1976) FORTT routine.
    N   )lennpfftrfftr_realimag)Xmys      b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/nonparametric/kdetools.pyforrtr      sL     	yFF
AqAA51R4%&&    c                     |t          |           }t          |dz  dz             }| d|         t          j        d| |d         df         dz  z   }t          j                            |          |z  S )zE
    Inverse of forrt. Equivalent to Munro (1976) REVRT routine.
    N   r   r   y              ?)r   intr   r
   r   irfft)r   r   ir   s       r   revrtr      sj     	yFFAFQJA	"1"a122k"R''A6<<??1r   c                    t          j        |dz  dz             }dt           j        | z  |z  dz  z  }|dz  |z  }dd|dz  |z  t           j        z  dz  z  z
  }t          j        |           |z  }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   arangepiexpr
   )	bwMRANGEJFAC1JFACBCFACkern_ests	            r   silverman_transformr&      s     		!A#a%AbeBhunq  Da49D	
Vq2vax~))	)B
&$--
CuS#ad)^$HOr   c           	      0   t          j        | |          }	 t          j        |t          |                    S #  t          j        |          }t           j        |t          j        t          |          t          |          z
            f         cY S xY w)z
    Counts the number of elements of x that fall within the grid points v

    Notes
    -----
    Using np.digitize and np.bincount
    )	minlength)r   digitizebincountr   r
   zeros)xvidxbcs       r   countsr0   '   s     +a

C5{3#a&&11115[uR#a&&3r77"23334444s
   ": ABc                 |     t          j         fdt          t                               D                       S )Nc                 L    g | ] }t          j        |         z
            !S  )r   sum).0r   axisr,   s     r   
<listcomp>zkdesum.<locals>.<listcomp>7   s-    EEE!rvadQh--EEEr   )r   asarrayranger   )r,   r6   s   ``r   kdesumr:   6   s8    :EEEEEuSVV}}EEEFFFr   )N)r   )numpyr   r   r   r&   r0   r:   r3   r   r   <module>r<      s{       ' ' ' '      5 5 5G G G G G Gr   