
 m[c           @` s_  d  d l  m Z m Z m Z m Z d  d l Z d  d l m Z m	 Z
 m Z m Z d  d l m Z d  d l m Z d d l m Z d  d l Z d e f d	     YZ i  Z d d
  Z e   Z d e f d     YZ i  Z d d  Z e d e  Z d   Z  d e f d     YZ! i  Z" d d  Z# d   Z$ e# d e  Z% e e%  Z& d   Z' d   Z( d S(   i    (   t   absolute_importt   divisiont   print_functiont   unicode_literalsN(   t   artistt   collectionst
   transformst   rcParams(   t   subplot_class_factory(   t   Bboxi   (   t   Axest   ParasiteAxesBasec           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` sC   d   |  j    D } d   |  j D } t |  t | |  f S(   Nc         S` s"   h  |  ] } | j    r |  q S(    (   t   get_visible(   t   .0t   a(    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pys	   <setcomp>   s   	 c         S` s"   h  |  ] } | j    r |  q S(    (   R   (   R   R   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pys	   <setcomp>   s   	 (   t   get_childrent   imagest   list(   t   selft   artistsR   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   get_images_artists   s    c         K` sE   | |  _  | j t d t   |  j d  |  | j | j |  d  S(   Nt   frameonu   __init__(   t   _parent_axest   updatet   dictt   Falset   _get_base_axes_attrt   figuret	   _position(   R   t   parent_axest   kargs(    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   __init__   s    	c         C` s   |  j  d  |   t j |  j   d t |  j j |  _ |  j rg |  j j	 d  |  j
 j	 d  n  |  j j	 d  |  j
 j	 d  d  S(   Nu   clat   visibleg      ?g      @(   R   t   martistt   setpR   R   R   t
   _get_linest
   _axisbelowt   xaxist
   set_zordert   yaxis(   R   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   cla   s    	(   t   __name__t
   __module__R   R   R(   (    (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR      s   		c         ` s|     d  k r t   n  t j    } | d  k rx   f d   } t t d   j  t   f i | d 6 } | t   <n  | S(   Nc         ` s   t    |  S(   N(   t   getattr(   R   t   attrname(   t
   axes_class(    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR   6   s    u
   %sParasiteu   _get_base_axes_attr(   t   NoneR
   t   _parasite_axes_classest   gett   typet   strR)   R   (   R-   t	   new_classR   (    (   R-   sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   parasite_axes_class_factory0   s    		t   ParasiteAxesAuxTransBasec           B` sz   e  Z d d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z d
   Z d d  Z RS(   c         K` s0   | |  _  |  j |  |  j j |  | |  d  S(   N(   t   transAuxt   set_viewlim_modet   _parasite_axes_classR   (   R   R   t   aux_transformt   viewlim_modet   kwargs(    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR   K   s    	c         C` s_   |  j  j |  _ |  j |  j  j |  _ t j |  j |  j  |  _ t j |  j |  j  |  _ d  S(   N(   R   t	   transAxesR6   t	   transDatat   mtransformst   blended_transform_factoryt   _xaxis_transformt   _yaxis_transform(   R   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   _set_lim_and_transformsS   s    c         C` s/   | d k r" t d | f   n	 | |  _ d  S(   Nu   equalu	   transformu   Unknown mode : %s(   Nu   equalu	   transform(   R.   t
   ValueErrort   _viewlim_mode(   R   t   mode(    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR7   `   s    c         C` s   |  j  S(   N(   RD   (   R   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   get_viewlim_modef   s    c         C` s   |  j  j j   } |  j   } | d  k r- nl | d k rO |  j j j |  nJ | d k r |  j j j | j |  j j	     n t
 d |  j f   d  S(   Nu   equalu	   transformu   Unknown mode : %s(   R   t   viewLimt   frozenRF   R.   t   axest   sett   transformedR6   t   invertedRC   RD   (   R   t   viewlimRE   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   update_viewlimj   s    (c         O` se  t  |  d k rp | d } | j \ } } t j d | d  } t j d | d  } t j | |  \ }	 }
 n | \ }	 }
 } |  j |  } d | k r | |  |	 |
 | |  } n |	 j } t j |	 j |
 j g  } | j   } |  j	 j
 |  } | d  d   d f j |  | d  d   d f j |  } } | |  | | | |  } | j |  j j  | S(   Ni   i    g      g      ?u	   transform(   t   lent   shapet   npt   aranget   meshgridR   t   vstackt   flatt	   transposeR6   t	   transformt   reshapet   set_transformR   R=   (   R   t   method_namet   XYCR;   t   Ct   nyt   nxt   gxt   gyt   Xt   Yt   pcolor_routinet   mesht
   orig_shapet   xyt   xytt   wxy(    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   _pcolorw   s$    
	?c         O` s   |  j  d | |  S(   Nu
   pcolormesh(   Ri   (   R   R[   R;   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt
   pcolormesh   s    c         O` s   |  j  d | |  S(   Nu   pcolor(   Ri   (   R   R[   R;   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   pcolor   s    c         O` s  t  |  d k rv | d } | j \ } } t j d | d  } t j d | d  } t j | |  \ }	 }
 | } n | d  \ }	 }
 | d } |  j |  } d | k r | |  |	 |
 | |  } n |	 j } t j |	 j |
 j g  } | j   } |  j	 j
 |  } | d  d   d f j |  | d  d   d f j |  } } | |  | | | |  } x$ | j D] } | j |  j j  qiW| S(   Ni   i    g        g      ?u	   transformi   (   RO   RP   RQ   RR   RS   R   RT   RU   RV   R6   RW   RX   R   RY   R   R=   (   R   RZ   t   XYCLR;   R\   R]   R^   R_   R`   Ra   Rb   t   CLt   contour_routinet   contRe   Rf   Rg   Rh   t   c(    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   _contour   s*    
	
	?c         O` s   |  j  d | |  S(   Nu   contour(   Rq   (   R   Rl   R;   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   contour   s    c         O` s   |  j  d | |  S(   Nu   contourf(   Rq   (   R   Rl   R;   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   contourf   s    c         C` s!   |  j    |  j d  |   d  S(   Nu   apply_aspect(   RN   R   (   R   t   position(    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   apply_aspect   s    
N(   R)   R*   R.   R   RB   R7   RF   RN   Ri   Rj   Rk   Rq   Rr   Rs   Ru   (    (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR5   J   s   										c         C` s   |  d  k r t } n$ t |  t  s3 t |   } n |  } t j |  } | d  k r t t d | j	  t
 | f i | d 6d d 6 } | t | <n  | S(   Nu   %sParasiteAuxTransu   _parasite_axes_classu   parasite_axesu   name(   R.   t   ParasiteAxest
   issubclassR   R4   t   _parasite_axes_auxtrans_classesR0   R1   R2   R)   R5   (   R-   t   parasite_axes_classR3   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt$   parasite_axes_auxtrans_class_factory   s    		
R-   c         C` s   |  j  } | j |  j  | j g  |  j D] } t | t j  r* | ^ q*  | j g  |  j D] } t | t j  r_ | ^ q_  | j g  |  j D] } t | t j  r | ^ q  | S(   N(	   t   linest   extendt   patchesR   t
   isinstancet   mcollt   LineCollectiont   RegularPolyCollectiont   CircleCollection(   t   axt   handlesRp   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   _get_handles   s    
t   HostAxesBasec           B` sq   e  Z d    Z d d
 d  Z d
 d  Z d   Z d   Z d
 d  Z d
 d  Z	 d
 d
 d  Z
 e d	  Z RS(   c         O` s&   g  |  _  |  j d  |  | |  d  S(   Nu   __init__(   t	   parasitesR   (   R   t   argsR;   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR      s    	u   equalc         ` sD   t  |  } |   | |  }   j j |    f d   | _ | S(   Nc         ` s     j  j |   S(   N(   R   t   remove(   t   h(   R   (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   <lambda>   s    (   Rz   R   t   appendt   _remove_method(   R   t   trR:   R-   Ry   t   ax2(    (   R   sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   get_aux_axes   s
    c         C` sR   |  j  d  } t | |  |   } x' |  j D] } | j | j |   q. W| S(   Nu   _get_legend_handles(   R   R   R   R|   t   _get_legend_handles(   R   t   legend_handler_mapt   Axes_get_legend_handlest   all_handlesR   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR      s
    c   
      C` s  t  |  j  } t  |  j  } t |  d  r~ |  j   } | rq | |  |  } |  j | d d |  j |  q |  j   n
 |  j   |  j   } xP |  j D]E } | j |  | j	   \ } }	 |  j j
 |  |  j j
 |	  q W|  j d  |  |  | |  _ | |  _ d  S(   Nu   get_axes_locatort   whichu   activeu   draw(   R   R   R   t   hasattrt   get_axes_locatort   set_positionRu   t   get_positionR   R   R|   R   (
   R   t   renderert   orig_artistst   orig_imagest   locatort   post   rectR   R   R   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   draw  s&    
	c         C` s5   x |  j  D] } | j   q
 W|  j d  |   d  S(   Nu   cla(   R   R(   R   (   R   R   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR(   #  s    c         ` s   | d k r   j   } n  t |  } |   d   d t }   j j |    j d j t  | j d j t  | j d	 j t    f d   } | | _	 | S(
   u   
        create a twin of Axes for generating a plot with a sharex
        x-axis but independent y axis.  The y-axis of self will have
        ticks on left and the returned axes will have ticks on the
        right
        t   sharexR   u   rightu   leftu   topu   bottomc         ` sE     j  j |     j d j t    j d j d t d t  d  S(   Nu   rightt
   ticklabelst   label(   R   R   t   axist   set_visiblet   Truet   toggleR   (   R   (   R   (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR   A  s    N(   u   leftu   topu   bottom(
   R.   t   _get_base_axesR4   R   R   R   R   R   R   R   (   R   R-   Ry   R   R   (    (   R   sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   twinx,  s    	c         ` s   | d k r   j   } n  t |  } |   d   d t }   j j |    j d j t  | j d j t  | j d	 j t    f d   } | | _	 | S(
   u   
        create a twin of Axes for generating a plot with a shared
        y-axis but independent x axis.  The x-axis of self will have
        ticks on bottom and the returned axes will have ticks on the
        top
        t   shareyR   u   topu   leftu   rightu   bottomc         ` sE     j  j |     j d j t    j d j d t d t  d  S(   Nu   topR   R   (   R   R   R   R   R   R   R   (   R   (   R   (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR   ^  s    N(   u   leftu   rightu   bottom(
   R.   R   R4   R   R   R   R   R   R   R   (   R   R-   Ry   R   R   (    (   R   sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   twinyI  s    	c         ` s   | d
 k r   j   } n  t |  } | d
 k rQ |   t j   d d } n |   | d d }   j j |    f d   | _   j d j	 t
  | j d j	 t  | j d j	 t
    f d	   } | | _ | S(   u   
        create a twin of Axes for generating a plot with a sharex
        x-axis but independent y axis.  The y-axis of self will have
        ticks on left and the returned axes will have ticks on the
        right
        R:   u   equalu	   transformc         ` s     j  j |   S(   N(   R   R   (   R   (   R   (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR   }  s    u   topu   rightu   leftu   bottomc         ` sE     j  j |     j d j t    j d j d t d t  d  S(   Nu   topu   rightR   R   (   u   topu   right(   u   topu   right(   R   R   R   R   R   R   R   (   R   (   R   (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR     s    N(   u   topu   right(   u   topu   right(   u   leftu   bottom(   R.   R   Rz   R>   t   IdentityTransformR   R   R   R   R   R   R   (   R   t	   aux_transR-   t   parasite_axes_auxtrans_classR   R   (    (   R   sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   twing  s     		c         C` s   g  |  j  D] } | j | |  ^ q
 } |  j d  } | j | |  | |   t j g  | D]* } | j d k s | j d k r] | ^ q]  } | S(   Nu   get_tightbboxi    (   R   t   get_tightbboxR   R   R	   t   uniont   widtht   height(   R   R   t   call_axes_locatorR   t   bbsR   t   bt   _bbox(    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR     s    %@N(   R)   R*   R   R.   R   R   R   R(   R   R   R   R   R   (    (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR      s   					%c         ` s     d  k r t   n  t j    } | d  k r   f d   }   f d   } t t d   j  t   f i | d 6| d 6 } | t   <n  | S(   Nc         ` s     S(   N(    (   R   (   R-   (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR     s    c         ` s   t    |  S(   N(   R+   (   R   R,   (   R-   (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyR     s    u
   %sHostAxesu   _get_base_axes_attru   _get_base_axes(   R.   R
   t   _host_axes_classesR0   R1   R2   R)   R   (   R-   R3   R   R   (    (   R-   sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   host_axes_class_factory  s    		
c         C` s   t  d |   } t |  } | S(   NR-   (   R   R   (   R-   t   host_axes_classt   subplot_host_class(    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   host_subplot_class_factory  s    c          O` s   d d l  j } | j d d  } t |  } | j d d  } | d k rZ | j   } n  | | |  |  } | j |  | j   | S(   uK  
    Create axes that can act as a hosts to parasitic axes.

    Parameters
    ----------
    figure : `matplotlib.figure.Figure`
        Figure to which the axes will be added. Defaults to the current figure
        `pyplot.gcf()`.

    *args, **kwargs :
        Will be passed on to the underlying ``Axes`` object creation.
    i    Nu
   axes_classu   figure(	   t   matplotlib.pyplott   pyplott   popR.   R   R0   t   gcft   add_axest   draw_if_interactive(   R   R;   t   pltR-   R   t   figR   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt	   host_axes  s    
c          O` s   d d l  j } | j d d  } t |  } | j d d  } | d k rZ | j   } n  | | |  |  } | j |  | j   | S(   uR  
    Create a subplot that can act as a host to parasitic axes.

    Parameters
    ----------
    figure : `matplotlib.figure.Figure`
        Figure to which the subplot will be added. Defaults to the current
        figure `pyplot.gcf()`.

    *args, **kwargs :
        Will be passed on to the underlying ``Axes`` object creation.
    i    Nu
   axes_classu   figure(	   R   R   R   R.   R   R0   R   t   add_subplotR   (   R   R;   R   R-   t   host_subplot_classR   R   (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   host_subplot  s    
()   t
   __future__R    R   R   R   t   sixt
   matplotlibR   R!   R   R   R   R>   R   t   matplotlib.axesR   t   matplotlib.transformsR	   t   mpl_axesR
   t   numpyRQ   t   objectR   R/   R.   R4   Rv   R5   Rx   Rz   t   ParasiteAxesAuxTransR   R   R   R   R   t   HostAxest   SubplotHostR   R   (    (    (    sD   lib/python2.7/site-packages/mpl_toolkits/axes_grid1/parasite_axes.pyt   <module>   s.   ""	
{			