σ
 m[c           @` s#  d  d l  m Z m Z m Z m Z d  d l Z d  d l Z d  d l m	 Z	 d d l
 m Z e j Z d  d l j Z d  d l m Z d e f d     YZ d	 e f d
     YZ d e f d     YZ d e j f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d S(   i    (   t   absolute_importt   divisiont   print_functiont   unicode_literalsN(   t   Bboxi   (   t	   clip_path(   t	   Transformt   ExtremeFinderSimplec           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s   | | |  _  |  _ d  S(   N(   t   nxt   ny(   t   selfR   R	   (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyt   __init__   s    c         C` sΈ   t  j | | |  j  t  j | | |  j  } } t  j | |  \ } }	 | t  j |  t  j |	   \ }
 } |
 j   |
 j   } } | j   | j   } } |  j | | | |  S(   u   
        get extreme values.

        x1, y1, x2, y2 in image coordinates (0-based)
        nx, ny : number of division in each axis
        (	   t   npt   linspaceR   R	   t   meshgridt   ravelt   mint   maxt   _add_pad(   R
   t   transform_xyt   x1t   y1t   x2t   y2t   x_t   y_t   xt   yt   lont   latt   lon_mint   lon_maxt   lat_mint   lat_max(    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyt   __call__   s    1'c         C` s\   | | |  j  } | | |  j } | | | | } } | | | | } } | | | | f S(   u    a small amount of padding is added because the current
        clipping algorithms seems to fail when the gridline ends at
        the bbox boundary.
        (   R   R	   (   R
   R   R   R    R!   t   dlont   dlat(    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   $   s
    (   t   __name__t
   __module__R   R"   R   (    (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR      s   		t   GridFinderBasec           B` sD   e  Z d d d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` sD   t  t |   j   | |  _ | |  _ | |  _ | |  _ | |  _ d S(   uε   
        the transData of the axes to the world coordinate.
        locator1, locator2 : grid locator for 1st and 2nd axis.

        Derived must define "transform_xy, inv_transform_xy"
        (may use update_transform)
        N(   t   superR'   R   t   extreme_findert   grid_locator1t   grid_locator2t   tick_formatter1t   tick_formatter2(   R
   R)   R*   R+   R,   R-   (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   4   s    				c         C` sZ  |  j  |  j | | | |  } | \ } } } }	 |  j | |  \ }
 } } |  j | |	  \ } } } | d k r t j |
 |   } n t j |
 |  |  } | d k rΑ t j | |   } n t j | |  |  } |  j | | | | | |	  \ } } | | d } | | d } t j	 | | | | | | | |  } i  } | | d <| | d <| | d <|  j
 | | |
 |  | d <|  j
 | | | |  | d <t   } | d d <xE d d	 d
 d g D]1 } | d d | } |  j | | |  | | <qΔWt   } | d d <xE d d	 d
 d g D]1 } | d d | } |  j | | |  | | <q!W| S(   u   
        lon_values, lat_values : list of grid values. if integer is given,
                           rough number of grids in each direction.
        g»½ΧΩί|Ϋ=u   extremesu	   lon_linesu	   lat_linesu   lonu   latu   tick_labelsu   leftu   bottomu   rightu   topu   tick_levelsN(   R)   t   inv_transform_xyR*   R+   t   NoneR   t   asarrayt   _get_raw_grid_linesR   t   from_extentst   _clip_grid_lines_and_find_tickst   dictR,   R-   (   R
   R   R   R   R   t   extremesR   R   R    R!   t   lon_levst   lon_nt
   lon_factort   lat_levst   lat_nt
   lat_factort
   lon_valuest
   lat_valuest	   lon_linest	   lat_linest   ddxt   ddyt   bbt	   grid_infot
   tck_labelst	   directiont   levs(    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyt   get_grid_infoI   sP    	(


				c         C` s   t  j | | d  } t  j | | d  } g  | D]% }	 |  j t  j |  |	 |  ^ q1 }
 g  | D]% } |  j | t  j |  |  ^ qc } |
 | f S(   Nid   (   R   R   R   t
   zeros_like(   R
   R<   R=   R   R   R    R!   t   lons_it   lats_iR   R>   R   R?   (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR1      s    //c      	   C` sZ  t    } g  | d <g  | d <t  d g  d g  d g  d g   | d <t  d g  d g  d g  d g   | d <g  | d	 <| d } | d } xΞ t | | |  D]Ί \ \ } }	 }
 } t | |	 |  \ } } | sΡ q n  | d j |
  | d	 j |  x\ t | d
 d d d g  D]? \ } } x0 | D]( } | | j |  | | j |  q"WqWq W| S(   Nu   valuesu   levelst   leftt   bottomt   rightt   topu   tick_levelsu	   tick_locsu   linesu   leftu   bottomu   rightu   top(   R4   t   zipt   clip_line_to_rectt   append(   R
   t   linest   valuesRF   RB   t   git
   tck_levelst   tck_locst   lxt   lyt   vt   levt   xyt   tckst   tckRE   t   t(    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR3      s(    	

%%


(	c         ` sR   t    t  r0   f d   }   f d   } n   \ } } | |  _ | |  _ d  S(   Nc         ` s£   t  j |   t  j |  }  } t  j |  d  d   t  j f | d  d   t  j f f d  }   j |  } | d  d   d f | d  d   d f } } | | f S(   Ni   i    (   R   R0   t   concatenatet   newaxist	   transform(   R   R   t   ll1t   ll2R   R   (   t	   aux_trans(    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   ·   s
    >-c         ` s©   t  j |   t  j |  }  } t  j |  d  d   t  j f | d  d   t  j f f d  }   j   j |  } | d  d   d f | d  d   d f } } | | f S(   Ni   i    (   R   R0   R_   R`   t   invertedRa   (   R   R   Rb   Rc   R   R   (   Rd   (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR.   Ύ   s
    >-(   t
   isinstanceR   R   R.   (   R
   Rd   R   R.   (    (   Rd   sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyt   update_transform΅   s    	c         K` sH   xA | D]9 } | d k r0 t  |  | | |  q t d |   q Wd  S(   Nu   extreme_finderu   grid_locator1u   grid_locator2u   tick_formatter1u   tick_formatter2u   unknown update property '%s'(   u   extreme_finderu   grid_locator1u   grid_locator2u   tick_formatter1u   tick_formatter2(   t   setattrt
   ValueError(   R
   t   kwt   k(    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyt   updateΜ   s       	N(	   R%   R&   R/   R   RG   R1   R3   Rg   Rl   (    (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR'   3   s   	C			t
   GridFinderc           B` s    e  Z d d d d d d   Z RS(   c         C` s±   | d k r t d d  } n  | d k r6 t   } n  | d k rN t   } n  | d k rf t   } n  | d k r~ t   } n  t t |   j | | | | |  |  j |  d S(   u  
        transform : transform from the image coordinate (which will be
        the transData of the axes to the world coordinate.

        or transform = (transform_xy, inv_transform_xy)

        locator1, locator2 : grid locator for 1st and 2nd axis.
        i   N(   R/   R   t   MaxNLocatort   FormatterPrettyPrintR(   Rm   R   Rg   (   R
   Ra   R)   R*   R+   R,   R-   (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   Ϊ   s"    N(   R%   R&   R/   R   (    (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyRm   Ψ   s
   Rn   c           B` s5   e  Z d  d e e e d d  Z d   Z d   Z RS(   i
   c         C` sB   t  j j |  | d | d | d | d | |  j   d  |  _ d  S(   Nt   stepst   integert	   symmetrict   prune(   t   mtickerRn   R   t   create_dummy_axisR/   t   _factor(   R
   t   nbinsRp   t   trimRq   Rr   Rs   (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   ύ   s
    
c         C` s    |  j  d  k	 r^ |  j | |  j  | |  j   t j j |   } t j |  t |  |  j  f S|  j | |  t j j |   } t j |  t |  d  f Sd  S(   N(	   Rv   R/   t
   set_boundsRt   Rn   R"   R   t   arrayt   len(   R
   t   v1t   v2t   locs(    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR"   	  s    c         C` s   | |  _  d  S(   N(   Rv   (   R
   t   f(    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyt
   set_factor  s    N(   R%   R&   R/   t   Truet   FalseR   R"   R   (    (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyRn   ό   s   	
t   FixedLocatorc           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s   | |  _  d  |  _ d  S(   N(   t   _locsR/   Rv   (   R
   R~   (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR     s    	c         C` s£   |  j  d  k r* t | | g  \ } } n& t | |  j  | |  j  g  \ } } t j g  |  j D]$ } | | k r` | | k r` | ^ q`  } | t |  |  j  f S(   N(   Rv   R/   t   sortedR   Rz   R   R{   (   R
   R|   R}   t   lR~   (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR"     s
    &=c         C` s   | |  _  d  S(   N(   Rv   (   R
   R   (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   %  s    (   R%   R&   R   R"   R   (    (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR     s   		Ro   c           B` s   e  Z e d   Z d   Z RS(   c         C` s5   t  j d | d t  |  _ |  j j   t |  _ d  S(   Nt   useMathTextt	   useOffset(   Rt   t   ScalarFormatterR   t   _fmtRu   R   t   _ignore_factor(   R
   R   (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   -  s    	c         C` sn   |  j  s> | d  k r d } n  g  | D] } | | ^ q% } n  |  j j |  g  | D] } |  j |  ^ qU S(   Ng      π?(   R   R/   R   t   set_locs(   R
   RE   t   factorRS   RY   (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR"   3  s    		 (   R%   R&   R   R   R"   (    (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyRo   ,  s   t   DictFormatterc           B` s   e  Z d d   Z d   Z RS(   c         C` s)   t  t |   j   | |  _ | |  _ d S(   uq   
        format_dict : dictionary for format strings to be used.
        formatter : fall-back formatter
        N(   R(   R   R   t   _format_dictt   _fallback_formatter(   R
   t   format_dictt	   formatter(    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   >  s    	c         C` so   |  j  r! |  j  | | |  } n d g t |  } g  t | |  D]! \ } } |  j j | |  ^ qD } | S(   uG   
        factor is ignored if value is found in the dictionary
        u    (   R   R{   RO   R   t   get(   R
   RE   R   RS   t   fallback_stringsRk   RY   t   r(    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR"   G  s    		.N(   R%   R&   R/   R   R"   (    (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   =  s   	(   t
   __future__R    R   R   R   t   sixt   numpyR   t   matplotlib.transformsR   t    R   RP   t   matplotlib.tickert   tickerRt   R   t   objectR   R'   Rm   Rn   R   Ro   R   (    (    (    sB   lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyt   <module>   s   "	#₯$