ó
Ë½÷Xc           @   sÅ   d  d l  Z d  d l m Z d  d l m Z m Z m Z m Z m	 Z	 d  d l
 m Z m Z m Z d  d l m Z d d d „ Z d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ e d k rÁ e ƒ  n  d S(   iÿÿÿÿN(   t   product(   t   TestCaset   run_module_suitet   assert_equalt   assert_raisest   assert_allclose(   t   upfirdnt   firwint   lfilter(   t   _output_leni   c         C   sƒ   t  j | ƒ } t  j t |  ƒ | |  j ƒ } |  | d d | … <t  j | | ƒ d d | … t t | ƒ t |  ƒ | | ƒ  } | S(   so   Naive upfirdn processing in Python

    Note: arg order (x, h) differs to facilitate apply_along_axis use.
    N(   t   npt   asarrayt   zerost   lent   dtypet   convolveR	   (   t   xt   ht   upt   downt   out(    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pyt   upfirdn_naive,   s
    >t   UpFIRDnCasec           B   s,   e  Z d  Z d „  Z d „  Z d d „ Z RS(   s   Test _UpFIRDn objectc         C   sF   | |  _  | |  _ t j | ƒ |  _ | |  _ t j j d ƒ |  _ d  S(   Ni   (	   R   R   R
   t
   atleast_1dR   t   x_dtypet   randomt   RandomStatet   rng(   t   selfR   R   R   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pyt   __init__:   s
    			c         C   s«  |  j  t j d |  j ƒ ƒ |  j  t j d |  j ƒ ƒ |  j j d ƒ j |  j ƒ } |  j t j t j f k rŽ | d |  j j d ƒ 7} n  |  j  | ƒ |  j  t j	 d ƒ j |  j ƒ ƒ d } |  j j | Œ  j |  j ƒ } |  j t j t j f k r| d |  j j | Œ  7} n  x- t
 t | ƒ ƒ D] } |  j  | d | ƒq,W| d  d  … d  d  d … d d  d … f j } x- t
 t | ƒ ƒ D] } |  j  | d | ƒqŠWd  S(	   Ni   i
   y              ð?i   i   i   t   axis(   i   i   i   (   t   scrubR
   t   onesR   R   t   randnt   astypet	   complex64t
   complex128t   aranget   rangeR   t   T(   R   R   t   sizeR   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pyt   __call__A   s     ".iÿÿÿÿc         C   sD  t  j t | | |  j |  j |  j ƒ } t |  j | |  j |  j d | ƒ} |  j j | j f } t d „  | Dƒ ƒ rŒ t	 | j t  j
 ƒ n§ t  j
 | k rÀ t  j | k rÀ t	 | j t  j
 ƒ ns t d „  | Dƒ ƒ rì t	 | j t  j ƒ nG t  j | k s
t  j
 | k r t	 | j t  j ƒ n t	 | j t  j ƒ t | | ƒ d  S(   NR   c         s   s   |  ] } | t  j k Vq d  S(   N(   R
   R#   (   t   .0t   d(    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pys	   <genexpr>]   s    c         s   s   |  ] } | t  j k Vq d  S(   N(   R
   t   float32(   R*   R+   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pys	   <genexpr>a   s    (   R
   t   apply_along_axisR   R   R   R   R   R   t   allR   R#   R,   R$   t   float64R   (   R   R   R   t   yrt   yt   dtypes(    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pyR   X   s    $(   t   __name__t
   __module__t   __doc__R   R)   R   (    (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pyR   8   s   		t   test_upfirdnc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   sa   t  t t d g d g d d ƒ t  t t g  d g d d ƒ t  t t d g g d g d d ƒ d  S(   Ni   i    (   R   t
   ValueErrorR   (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pyt   test_valid_inputl   s    c      	   C   s%  t  j j d ƒ } t t  j t  j t t f } d } d d d g } xÜ | D]Ô } | j | ƒ j	 | ƒ } | t  j t  j
 f k r™ | d | j | ƒ 7} n  x | D]y } t d d | d	 d
 ƒ} t | d | ƒ d  d  | … }	 t | | d d d | ƒ}
 t |	 |
 |	 j  d d d d ƒq  WqI Wd  S(   Ni   i'  i   i   iO   y              ð?i   g      ð?t   windowt   hammingR   i   R   t   atolgH¯¼šò×z>t   rtol(   R
   R   R   t   intR,   R#   t   floatt   complexR!   R"   R$   R   R   R   R   R(   (   R   t   random_statet	   try_typesR(   t   down_factorsR   R   R   R   t   ylR1   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pyt   test_vs_lfilterq   s    c   	      C   s  g  } t  t j t j t t f } x t | d ƒ D]| \ } } | j t d d | | ƒ ƒ | j t d d | | ƒ ƒ | j t d d | | ƒ ƒ | j t d d | | ƒ ƒ q1 Wd	 } t | | | | ƒ } x! | D] } | |  j	 | Œ  7} qÓ Wx | D] } | ƒ  q÷ Wd  S(
   Ng      ð?y              ð?i   i   i   id   i
   (   g      ð?y              ð?(   id   i
   (
   R=   R
   R,   R#   R>   R?   R    t   appendR   t   _random_factors(	   R   t   testsRA   R   R   t   factorst   casest   caset   test(    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pyt   test_vs_naiveƒ   s     c         C   s  d } d } t  j j d ƒ } g  } xæ t | ƒ D]Ø }	 | | k rI | n d }
 | | k ra | n d } | j | ƒ |
 } | j | ƒ | } | j | ƒ d } t  j | j | ƒ ƒ } | j | ƒ } | t k rí | d | j | ƒ 7} n  | j t	 | | | | ƒ ƒ q1 W| S(   Ni   i   i   i   y              ð?(
   R
   R   R   R&   t   randintR   R"   R?   RE   R   (   R   t   p_maxt   q_maxt   h_dtypeR   t   n_rept	   longest_hR@   RG   t   _t   p_addt   q_addt   pt   qt   len_hR   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pyRF   ˜   s      (   R3   R4   R8   RD   RL   RF   (    (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pyR6   j   s   			t   __main__(   t   numpyR
   t	   itertoolsR    t   numpy.testingR   R   R   R   R   t   scipy.signalR   R   R   t   scipy.signal._upfirdnR	   R   t   objectR   R6   R3   (    (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_upfirdn.pyt   <module>#   s   (2F