ó
±éRc           @  s_  d  d l  m Z d  d l Z d  d l j Z d  d l m Z d  d l	 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 e d k r[e ƒ  Z e d d ƒ \ Z Z Z e ƒ  Z e e d d e ƒ ƒ n  d S(   iÿÿÿÿ(   t   print_functionN(   t   Bbox(   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   (    (    s]   /opt/xtal/ccp4-6.5-linux32/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(   s�   
        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(    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyt   __call__   s    1'c         C  s\   | | |  j  } | | |  j } | | | | } } | | | | } } | | | | f S(   sŸ    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(    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   "   s
    (   t   __name__t
   __module__R   R   R   (    (    (    s]   /opt/xtal/ccp4-6.5-linux32/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(   så   
        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)   (    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   2   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(   s˜   
        lon_values, lat_values : list of grid values. if integer is given,
                           rough number of grids in each direction.
        g»½×Ùß|Û=t   extremest	   lon_linest	   lat_linesR   R   t   tick_labelst   leftt   bottomt   rightt   topt   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   R*   R   R   R   R   t   lon_levst   lon_nt
   lon_factort   lat_levst   lat_nt
   lat_factort
   lon_valuest
   lat_valuesR+   R,   t   ddxt   ddyt   bbt	   grid_infot
   tck_labelst	   directiont   levs(    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyt   get_grid_infoG   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@   RA   R   R   R   R   t   lons_it   lats_iR   R+   R   R,   (    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR6   Š   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(
   Nt   valuest   levelsR.   R/   R0   R1   R2   t	   tick_locst   lines(   R9   t   zipt   clip_line_to_rectt   append(   R   RP   RM   RH   RD   t   git
   tck_levelst   tck_locst   lxt   lyt   vt   levt   xyt   tckst   tckRG   t   t(    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR8   ™   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   R5   t   concatenatet   newaxist	   transform(   R   R   t   ll1t   ll2R   R   (   t	   aux_trans(    s]   /opt/xtal/ccp4-6.5-linux32/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   R5   R_   R`   t   invertedRa   (   R   R   Rb   Rc   R   R   (   Rd   (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR3   »   s
    >-(   t
   isinstanceR   R   R3   (   R   Rd   R   R3   (    (   Rd   s]   /opt/xtal/ccp4-6.5-linux32/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(   NR%   R&   R'   R(   R)   s   unknown update property '%s'(   s   extreme_finders   grid_locator1s   grid_locator2s   tick_formatter1s   tick_formatter2(   t   setattrt
   ValueError(   R   t   kwt   k(    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyt   updateÉ   s       	N(	   R!   R"   R4   R   RI   R6   R8   Rg   Rl   (    (    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR#   1   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(   s  
        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(   R4   R   t   MaxNLocatort   FormatterPrettyPrintR$   Rm   R   Rg   (   R   Ra   R%   R&   R'   R(   R)   (    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   Ù   s"    N(   R!   R"   R4   R   (    (    (    s]   /opt/xtal/ccp4-6.5-linux32/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  sH   t  j j |  | d | d | d | d | d | ƒ|  j ƒ  d  |  _ d  S(   Nt   stepst   trimt   integert	   symmetrict   prune(   t   mtickerRn   R   t   create_dummy_axisR4   t   _factor(   R   t   nbinsRp   Rq   Rr   Rs   Rt   (    (    s]   /opt/xtal/ccp4-6.5-linux32/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(	   Rw   R4   t
   set_boundsRu   Rn   R   R   t   arrayt   len(   R   t   v1t   v2t   locs(    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR     s    c         C  s   | |  _  d  S(   N(   Rw   (   R   t   f(    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyt
   set_factor  s    N(   R!   R"   R4   t   Truet   FalseR   R   R€   (    (    (    s]   /opt/xtal/ccp4-6.5-linux32/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   _locsR4   Rw   (   R   R~   (    (    s]   /opt/xtal/ccp4-6.5-linux32/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(   Rw   R4   t   sortedR   Rz   R„   R{   (   R   R|   R}   t   lR~   (    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR     s
    &=c         C  s   | |  _  d  S(   N(   Rw   (   R   R   (    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR€   '  s    (   R!   R"   R   R   R€   (    (    (    s]   /opt/xtal/ccp4-6.5-linux32/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(   Ru   t   ScalarFormatterR‚   t   _fmtRv   R�   t   _ignore_factor(   R   R‡   (    (    s]   /opt/xtal/ccp4-6.5-linux32/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‹   R4   RŠ   t   set_locs(   R   RG   t   factorRM   RY   (    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   4  s    		 (   R!   R"   R�   R   R   (    (    (    s]   /opt/xtal/ccp4-6.5-linux32/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(   sq   
        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(    (    s]   /opt/xtal/ccp4-6.5-linux32/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(   sG   
        factor is ignored if value is found in the dictionary
        t    (   R�   R{   RQ   R�   t   get(   R   RG   R�   RM   t   fallback_stringsRk   RY   t   r(    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyR   H  s    		.N(   R!   R"   R4   R   R   (    (    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyRŽ   >  s   	t   __main__i    id   R.   (   t
   __future__R    t   numpyR   t   matplotlib.cbookt   cbookt   mcbookt   matplotlib.transformsR   t	   clip_pathRR   t   matplotlib.tickert   tickerRu   R   t   objectR   R#   Rm   Rn   Rƒ   Ro   RŽ   R!   t   locatorR~   t   nlocR�   t   fmtt   printR4   (    (    (    s]   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/grid_finder.pyt   <module>   s&   	#¦'		