ó
U¶\c           @   sº   d  Z  d d l m Z d d l Z d d l m Z d d d d d	 d
 g Z d „  Z	 d „  Z
 d „  Z d „  Z d i  d d d „ Z d „  Z d i  d d d „ Z d „  Z e d „ Z d S(   s@   Utilities used to generate various figures in the documentation.iÿÿÿÿ(   t   productN(   t   pyplott   wavedec_keyst   wavedec2_keyst   draw_2d_wp_basist   draw_2d_fswavedecn_basist   padt   boundary_mode_subplotc         C   s†   d } i  } xg t  |  ƒ D]Y } x" d d g D] } d | | | <q, Wd | d } | |  d k  r | j | ƒ q q Wt | j ƒ  ƒ S(   s6   Subband keys corresponding to a wavedec decomposition.t    t   at   di   N(   t   ranget   Nonet   popt   listt   keys(   t   levelt   approxt   coeffst   levt   k(    (    s.   lib/python2.7/site-packages/pywt/_doc_utils.pyR      s    c         C   sŒ   d } i  } xm t  |  ƒ D]_ } x( d d d d g D] } d | | | <q2 Wd | d } | |  d k  r | j | ƒ q q Wt | j ƒ  ƒ S(   s7   Subband keys corresponding to a wavedec2 decomposition.R   R	   t   ht   vR
   i   N(   R   R   R   R   R   (   R   R   R   R   R   (    (    s.   lib/python2.7/site-packages/pywt/_doc_utils.pyR      s    c         C   sp   |  d | d } } |  d | d } } | | | | | | | | g } | | | | | | | | g } | | f S(   sf  (x, y) coordinates for the 4 lines making up a rectangular box.

    Parameters
    ==========
    bl : float
        The bottom left corner of the box
    ur : float
        The upper right corner of the box

    Returns
    =======
    coords : 2-tuple
        The first and second elements of the tuple are the x and y coordinates
        of the box.
    i    i   (    (   t   blt   urt   xlt   xrt   ybt   ytt   box_xt   box_y(    (    s.   lib/python2.7/site-packages/pywt/_doc_utils.pyt   _box%   s    c         C   s+  g  } i  } x| D]
} d } } xl t  | ƒ D]^ \ } } | d k re | |  d d | d 7} n  | d k r0 | |  d d | d 7} q0 q0 W|  d d | d }	 |  d d | d }
 t | | f | |	 | |
 f ƒ \ } } | j | | f ƒ | |	 d | |
 d f | | <q W| | f S(	   Ni    R   R
   i   i   R   (   R   R
   (   R   R
   (   t	   enumerateR   t   append(   t   shapeR   t   coordst   centerst   keyt   offset_xt   offset_yt   nt   chart   sxt   syt   xct   yc(    (    s.   lib/python2.7/site-packages/pywt/_doc_utils.pyt   _2d_wp_basis_coordsB   s     
!%R   i    c      	   C   sý   t  |  | ƒ \ } } | d k r< t j d d ƒ \ } } n | j ƒ  } x) | D]! }	 | j |	 d |	 d | ƒ qO W| j ƒ  | j d ƒ | d k ró xY | j ƒ  D]H \ }
 } t	 |
 ƒ | k r¤ | j
 | d | d |
 d d d d ƒq¤ q¤ Wn  | | f S(   s4   Plot a 2D representation of a WaveletPacket2D basis.i   i    t   squaret   horizontalalignmentt   centert   verticalalignmentN(   R.   R   t   pltt   subplotst
   get_figuret   plott   set_axis_offt   axist   itemst   lent   text(   R"   R   t   fmtt   plot_kwargst   axt   label_levelsR#   R$   t   figt   coordR%   t   c(    (    s.   lib/python2.7/site-packages/pywt/_doc_utils.pyR   V   s    
c      	   C   s¶  g  } i  } xt  t | ƒ d d ƒD]ƒ} | \ } } d d g } t |  ƒ } xI t | ƒ D]; \ }	 }
 |
 d k r\ | d c |  d d |	 d 7<q\ q\ WxI t | ƒ D]; \ } }
 |
 d k r¨ | d c |  d d | d 7<q¨ q¨ W|  d d |	 d | d <|  d d | d | d <t | d | d f | d | d | d | d f ƒ \ } } | j | | f ƒ | d | d d | d | d d f | | | f <q% W| | f S(   Nt   repeati   i    R
   i   (   R
   (   R
   (   R    R   R   R    R   R!   (   R"   t   levelsR#   R$   R%   t   key0t   key1t   offsetst   widthst   n0R)   t   n1R,   R-   (    (    s.   lib/python2.7/site-packages/pywt/_doc_utils.pyt   _2d_fswavedecn_coordsk   s(    ''.(c      	   C   s  t  |  | ƒ \ } } | d k r< t j d d ƒ \ } } n | j ƒ  } x) | D]! }	 | j |	 d |	 d | ƒ qO W| j ƒ  | j d ƒ | d k rx{ | j ƒ  D]j \ }
 } t	 j
 g  |
 D] } t | ƒ ^ q½ ƒ } | | k r¤ | j | d | d |
 d d d d ƒq¤ q¤ Wn  | | f S(   s4   Plot a 2D representation of a WaveletPacket2D basis.i   i    R/   R0   R1   R2   N(   RK   R   R3   R4   R5   R6   R7   R8   R9   t   npt   maxR:   R;   (   R"   RD   R<   R=   R>   R?   R#   R$   R@   RA   R%   RB   R   R   (    (    s.   lib/python2.7/site-packages/pywt/_doc_utils.pyR   ‚   s     
(c         C   s¨  t  j | ƒ r | | f } n  |  j d k r< t d ƒ ‚ n  | d k rc t  j |  | d | ƒ} nA| d k r¸ | d k r |  j d d k r t d	 ƒ ‚ n  t  j |  | d d
 ƒ} nì| d k rå t  j |  | d d d d ƒ} n¿| d k rt  j |  | d d ƒ} n˜| d k rwt  j |  | d d d |  d | d |  d |  d |  d | d |  d |  d f ƒ} n-| d k r¤| \ } } t  j |  | d d ƒ} | |  j d } | } |  j } d }	 xk | | j k r:t | d t | d | | j ƒ ƒ }
 |	 d r#| |
 c d 9<n  | | 7} |	 d 7}	 qÐWd }	 x`| d k r t t d | | ƒ | ƒ }
 |	 d r‰| |
 c d 9<n  | | 8} |	 d 7}	 qDWn | d k r¤| \ } } t  j |  | d d d d ƒ} | |  j d } | } |  d } |  d } |  j d } |  d d d … } |  d } d }	 x§ | | j k rÞt | d t | d | | j ƒ ƒ }
 t |
 j	 |
 j
 ƒ } | | } |	 d r±| | | | | |
 <n | | | | | |
 <| | 7} |	 d 7}	 q8W|  d d d … } |  d  } d }	 xŸ | d k r t t d | | ƒ | ƒ }
 t |
 j
 |
 j	 d ƒ } | | } |	 d rs| | | | | |
 <n | | | | | |
 <| | 8} |	 d 7}	 qWn  | S(   st   Extend a 1D signal using a given boundary mode.

    Like numpy.pad but supports all PyWavelets boundary modes.
    i   s-   This padding function is only for 1D signals.t	   symmetrict   reflectt   modet   periodict   periodizationi   s,   periodization expects an even length signal.t   wrapt   zerost   constantt   constant_valuesi    t   edget   smootht   linear_rampt
   end_valuesiÿÿÿÿiþÿÿÿt   antisymmetrict   antireflectN(   RN   RO   (   RQ   RR   (   RL   t   isscalart   ndimt
   ValueErrorR   t   sizet   slicet   minRM   t   stopt   startR   (   t   xt
   pad_widthsRP   t   xpt   npad_lt   npad_rt   r_edget   l_edget	   seg_widthR(   t   segment_slicet   rv1t   lv1t   xr_oddt   xr_event   orig_slt   rvt   xl_oddt   xl_event   lv(    (    s.   lib/python2.7/site-packages/pywt/_doc_utils.pyR   ˜   s’    !+	















c         C   sÖ  | d k rA t  |  ƒ d d k rA t j |  |  d f f ƒ }  n  d t  |  ƒ } t j t  |  ƒ d | ƒ } t |  | | f d | ƒ} | j | | d ƒ | j | ƒ | d k rä | j | | | t  |  ƒ d !|  d  d ƒ n$ | j | | | t  |  ƒ !|  d ƒ t j d ƒ } | } | rEt  |  ƒ d }	 t d d	 ƒ }
 n% | d
 8} t  |  ƒ }	 t d d	 ƒ }
 | d k rˆt d d ƒ }
 n  xG |
 D]? } | j | | |	 | | j	 ƒ  d
 | j
 ƒ  d
 g d ƒ qWd S(   s<   Plot an illustration of the boundary mode in a subplot axis.RR   i   i   iÿÿÿÿRP   s   k.s   r.iþÿÿÿi   g      à?RX   RU   RT   i    s   k-N(   RX   RU   RT   (   R:   RL   t   concatenatet   arangeR   R6   t	   set_titlet   onesR   Rb   RM   (   Re   RP   R>   t   symwt   npadt   tRg   t   o2t   leftt   stept   rngt   rep(    (    s.   lib/python2.7/site-packages/pywt/_doc_utils.pyR   þ   s,    "/$
(   t   __doc__t	   itertoolsR    t   numpyRL   t
   matplotlibR   R3   t   __all__R   R   R   R.   R   R   RK   R   R   t   TrueR   (    (    (    s.   lib/python2.7/site-packages/pywt/_doc_utils.pyt   <module>   s    									f