
    !gF                     0    d dl ZddZddZd Zd ZddZy)	    Nc                     |t        |       }t        j                  j                  | |      |z  }t        j                  |j
                  |dd j                  f   S )z:
    RFFT with order like Munro (1976) FORTT routine.
       )lennpfftrfftr_realimag)Xmys      _/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/nonparametric/kdetools.pyforrtr      sM     	yF
AqAA551R%&&    c                     |t        |       }t        |dz  dz         }| d| t        j                  d| |d df   dz  z   }t        j                  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      sd     	yFAFQJA	"1a12k"R''A66<<?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beeBhunq  Da49D	
Vq2vax~))	)B
&&$-
CuuS#a)^$HOr   c           	      "   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   '   sm     ++a
C5{{3#a&115[[uuR#a&3r7"23344s
   8 ABc           	          t        j                  t        t        |             D cg c]  }t        j                  | |   | z
  |        c}      S c c}w N)r   asarrayranger   sum)r,   axisr   s      r   kdesumr7   6   s:    ::uSV}E!rvvadQh-EFFEs   #Ar2   )r   )numpyr   r   r   r&   r0   r7    r   r   <module>r:      s"    ' 5Gr   