ó
î&]\c           @   s­   d  d l  Z d  d l m Z d  d l m Z m Z d  d l 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 d S(   iÿÿÿÿN(   t   product(   t   assert_equalt   assert_allclose(   t   raises(   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>   lib/python2.7/site-packages/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>   lib/python2.7/site-packages/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>   lib/python2.7/site-packages/scipy/signal/tests/test_upfirdn.pyt   __call__B   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>   lib/python2.7/site-packages/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>   lib/python2.7/site-packages/scipy/signal/tests/test_upfirdn.pys	   <genexpr>b   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>   lib/python2.7/site-packages/scipy/signal/tests/test_upfirdn.pyR   Y   s    $(   t   __name__t
   __module__t   __doc__R   R'   R   (    (    (    s>   lib/python2.7/site-packages/scipy/signal/tests/test_upfirdn.pyR   9   s   		t   TestUpfirdnc           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    (   t   assert_raisest
   ValueErrorR   (   R   (    (    s>   lib/python2.7/site-packages/scipy/signal/tests/test_upfirdn.pyt   test_valid_inputm   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   ylR/   (    (    s>   lib/python2.7/site-packages/scipy/signal/tests/test_upfirdn.pyt   test_vs_lfilterr   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   testsR@   R   R   t   factorst   casest   caset   test(    (    s>   lib/python2.7/site-packages/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>   RD   R   (   R   t   p_maxt   q_maxt   h_dtypeR   t   n_rept	   longest_hR?   RF   t   _t   p_addt   q_addt   pt   qt   len_hR   (    (    s>   lib/python2.7/site-packages/scipy/signal/tests/test_upfirdn.pyRE   ™   s      (   R1   R2   R7   RC   RK   RE   (    (    (    s>   lib/python2.7/site-packages/scipy/signal/tests/test_upfirdn.pyR4   k   s   			(   t   numpyR   t	   itertoolsR    t   numpy.testingR   R   t   pytestR   R5   t   scipy.signalR   R   R   t   scipy.signal._upfirdnR   R   t   objectR   R4   (    (    (    s>   lib/python2.7/site-packages/scipy/signal/tests/test_upfirdn.pyt   <module>#   s   2