ó
±éRc           @   sÇ  d  Z  d d l m 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 d d l Z d d l Z d e j f d	 „  ƒ  YZ d
 e j f d „  ƒ  YZ d d l m Z d e f d „  ƒ  YZ d e j f d „  ƒ  YZ d e f d „  ƒ  YZ i  Z d „  Z d d l m Z d d l m Z e e e ƒ ƒ Z d d l j Z e j  e ƒ Z! d „  Z" d „  Z# e$ d k rÃd d l% j& Z' e' j( d d d ƒZ) e) j* ƒ  e# e) ƒ e' j+ ƒ  n  d S(   s/   
An experimental support for curvilinear grid.
iÿÿÿÿ(   t   chain(   t
   GridFinder(   t   AxisArtistHelpert   GridHelperBase(   t
   AxisArtist(   t   Affine2Dt   IdentityTransformNt   FloatingAxisArtistHelperc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR      s   t   FixedAxisArtistHelperc           B   sJ   e  Z d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C   st   | j  | ƒ \ } } t t |  ƒ j | | | d | ƒ| d k rL | } n  | |  _ | |  _ | |  _ | |  _ d S(   s}   
        nth_coord = along which coordinate value varies.
         nth_coord = 0 ->  x axis, nth_coord = 1 -> y axis
        t   axis_directionN(	   t   get_data_boundaryt   superR
   t   __init__t   Nonet   nth_coord_tickst   valuet   grid_helpert   _side(   t   selfR   t   sideR   R   t	   nth_coord(    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR      s    				c         C   s#   |  j  j | ƒ |  j  j |  _ d  S(   N(   R   t
   update_limt	   grid_info(   R   t   axes(    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR   1   s    c         C   sû  |  j  d } |  j d k ra |  j } | d | d d } d t | d | d ƒ d } } nT |  j d k rµ | d | d d } |  j } t | d | d ƒ d d } } n  |  j j } | j | g | g ƒ \ } }	 | j | j j	 ƒ  }
 |
 j
 | d |	 d g ƒ } d | d k o-d	 k n ród | d k oMd	 k n ró| j j
 | d |	 d g ƒ \ } } | j | | g | | g ƒ \ } } | j j
 | d | d g ƒ \ } } | | f t j | | | | ƒ t j d
 f Sd Sd  S(   Nt   extremesi    i   i   g       @g        g     @�@i   g      ð?g     €f@(   NN(   R   R   R   t   absR   t   grid_findert   transform_xyt	   transDatat	   transAxest   invertedt   transform_pointt   npt   arctan2t   piR   (   R   R   R   t   xx0t   yy0t   dxxt   dyyR   t   xx1t   yy1t   trans_passingthrough_pointt   pt   xx1ct   yy1ct   xx2t   yy2t   xx2ct   yy2c(    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   get_axislabel_pos_angle8   s&    	&	&@&&&/c         C   s   t  ƒ  S(   N(   R   (   R   R   (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   get_tick_transformW   s    c            sû  ˆ j  j ‰ ˆ j d \ } } } ˆ j d \ } } } t j | ƒ t j | ƒ } } | d k	 rz | | } d | }	 n | } d }	 | d k	 r© | | }
 d | } n | }
 d } ˆ j  j } t | d  ƒ \ } } t | d ƒ \ } } ˆ j d k r| | k | | k @} | | } n2 ˆ j d k rQ| |
 k |
 | k @} |
 | }
 n  ‡  ‡ f d †  } ˆ j d k rŒt j	 | ƒ }
 |
 j
 ˆ j ƒ | |
 | ƒ \ ‰ ‰	 |
 j ƒ  } | |
 | | k c | 8<| | | ƒ \ ‰ ‰
 | | | | ƒ \ ‰ ‰ | j ƒ  } | | |	 | k c |	 8<| |
 | ƒ \ ‰ ‰ | |
 | |	 ƒ \ ‰ ‰ ˆ j d ‰ g  t ˆ | ƒ D] \ } } | rk| ^ qk‰ n)ˆ j d k rµt j	 |
 ƒ } | j
 ˆ j ƒ | |
 | ƒ \ ‰ ‰	 | j ƒ  } | | |	 | k c |	 8<| |
 | ƒ \ ‰ ‰
 | |
 | |	 ƒ \ ‰ ‰ |
 j ƒ  } | |
 | | k c | 8<| | | ƒ \ ‰ ‰ | | | | ƒ \ ‰ ‰ ˆ j d	 ‰ g  t ˆ | ƒ D] \ } } | r”| ^ q”‰ n  ‡  ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡	 ‡
 ‡ ‡ ‡ f d
 †  } | ƒ  t g  ƒ f S(   s9   tick_loc, tick_angle, tick_label, (optionally) tick_labelt   lat_infot   lon_infogü©ñÒMbP?i   i    i   c            s[   ˆ j  |  | ƒ \ } } ˆ  j j t j | | g ƒ j ƒ  ƒ } | j ƒ  \ } } | | f S(   N(   R   R   t	   transformR"   t   arrayt	   transpose(   t   xt   yt   x1t   y1t   x2y2t   x2t   y2(   R   R   (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR   |   s    't
   lat_labelst
   lon_labelsc          3   sa  t  j ˆ
 ˆ	 ˆ ˆ ƒ }  t  j ˆ ˆ ˆ ˆ ƒ } ˆ
 ˆ	 d k ˆ ˆ d k @} | | d d |  | <ˆ j ˆ  ƒ } | ˆ  j j ƒ  } xÐ t ˆ ˆ |  | ˆ ƒ D]¶ \ } } } } }	 | j | | f ƒ }
 d } d | |
 d k oö d | k n r£ d | |
 d k od | k n r£ | d d } | d d } | | g | | |	 f Vq£ q£ Wd  S(	   Ng        gn†ðù!	@g       @gñhãˆµøä>i    g      ð?i   g     €f@(   R"   R#   R4   R   R    t   zipR!   (   t   ddt   dd2t   mmt
   trans_tickt   tr2axR:   R;   t   dt   d2t   labt   c2t   deltat   d1(   R   t   labelsR   R)   t   xx1at   xx1bt   xx2at   xx2bR*   t   yy1at   yy1bt   yy2at   yy2b(    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   f1®   s    .((N(   R   R   R   R"   t   asarrayR   t	   _extremest   sortedR   t
   empty_liket   fillR   t   copyRC   t   iter(   R   R   t   lat_levst   lat_nt
   lat_factort   lon_levst   lon_nt
   lon_factorR&   t   dyR%   t   dxRZ   t   xmint   xmaxt   ymint   ymaxt   maskR   t   xx00t   yy00t   lt   mRX   (    (   R   R   RO   R   R)   RP   RQ   RR   RS   R*   RT   RU   RV   RW   s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   get_tick_iteratorsZ   sl    

113c         C   s   | j  S(   N(   R   (   R   R   (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   get_line_transformÈ   s    c      
   C   su   |  j  | ƒ d d l m } t d d d d d d d
 d ƒ |  j \ } } |  j | | \ } } | t | | ƒ ƒ S(   Niÿÿÿÿ(   t   Patht   leftt
   lon_lines0i    t   righti   t   bottomt
   lat_lines0t   top(   Ru   i    (   Ru   i   (   Rx   i    (   Rx   i   (   R   t   matplotlib.pathRs   t   dictR   R   RC   (   R   R   Rs   t   kt   vt   xxt   yy(    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   get_lineË   s    N(
   R   R	   R   R   R   R3   R4   Rq   Rr   R€   (    (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR
      s   				n	(   t   ExtremeFinderSimplet   ExtremeFinderFixedc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   RZ   (   R   R   (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR   Ü   s    c         C   s   |  j  S(   s�   
        get extreme values.

        x1, y1, x2, y2 in image coordinates (0-based)
        nx, ny : number of division in each axis
        (   RZ   (   R   R   R<   R=   R?   R@   (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   __call__ß   s    (   R   R	   R   Rƒ   (    (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR‚   Û   s   	t   GridHelperCurveLinearc           B   s\   e  Z d d d d d  „ Z d „  Z d d d d d „ Z d „  Z d d d „ Z d „  Z RS(	   c         C   sS   d |  _ | |  _ t | ƒ } t t |  ƒ j | | d | d | d | d | ƒd S(   sÄ  
        aux_trans : a transform from the source (curved) coordinate to
        target (rectilinear) coordinate. An instance of MPL's Transform
        (inverse transform should be defined) or a tuple of two callable
        objects which defines the transform and its inverse. The callables
        need take two arguments of array of source coordinates and
        should return two target coordinates:
          e.g., x2, y2 = trans(x1, y1)
        t   grid_locator1t   grid_locator2t   tick_formatter1t   tick_formatter2N(   R   t   _old_valuesRZ   R‚   R   R„   R   (   R   t	   aux_transR   R…   R†   R‡   Rˆ   t   extreme_finder(    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR   í   s    		c      
   C   sP   |  j  \ } } } } t d | d f d | d f d | d f d | d f ƒ | S(   s%   
        return v= 0 , nth=1
        Rt   i    Rv   Rw   i   Ry   (   RZ   R{   (   R   R   t   lon1t   lon2t   lat1t   lat2(    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR      s
    c         C   s�   | d  k r |  j } n  | d  k r- | } n  t |  | d | ƒ} t | | d | ƒ} | j j t ƒ | j j | j j ƒ | S(   NR   R   (	   R   R   R
   R   t   linet   set_clip_ont   Truet   set_clip_boxt   bbox(   R   t   locR   R   t   offsetR   t   _helpert   axisline(    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   new_fixed_axis+  s    		c         C   s7  |  j  d  k r t ƒ  |  _  n  |  j  } |  j } | j | j | | | | ƒ } t | d  ƒ \ } }	 t | d ƒ \ }
 } | j | |	 ƒ \ } } } | j |
 | ƒ \ } } } | |	 |
 | f | d <| | | f | d <| | | f | d <| j	 d | | ƒ | d <| j
 d | | ƒ | d <| d  k r@t j | |  ƒ } n t j | |  | ƒ } | d  k ryt j | |  ƒ } n t j | |  | ƒ } | | | k  | |	 k  @} | |
 | k  | | k  @} | j | | | |	 |
 | ƒ \ } } | | d <| | d	 <| j | d  | d | Œ \ } } | | d
 <| | d <d  S(   Ni   R   R6   R5   Rw   RB   RA   t	   lon_linest	   lat_linesRu   Rx   (   R   R   R{   R   R‹   t   inv_transform_xyR[   R…   R†   R‡   Rˆ   R"   RY   t   _get_raw_grid_lines(   R   R<   R=   R?   R@   R   R   R   t   lon_mint   lon_maxt   lat_mint   lat_maxRc   Rd   Re   R`   Ra   Rb   t
   lon_valuest
   lat_valuest   lon_values0t   lat_values0Rš   R›   (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   _update_gridY  sL    					


t   majort   bothc         C   sx   g  } | d k r= x( |  j  d D] } | j | g ƒ q  Wn  | d k rt x( |  j  d D] } | j | g ƒ qW Wn  | S(   NR¨   R:   Rš   R;   R›   (   R¨   R:   (   R¨   R;   (   R   t   extend(   R   t   whicht   axist
   grid_linest   gl(    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   get_gridlinesš  s    c         C   sF  |  j  \ } } } } |  j } t j | | d ƒ } t j | ƒ t j | ƒ } } | j | ƒ | j | ƒ t j | | d ƒ }	 t j |	 ƒ t j |	 ƒ }
 } |
 j | ƒ | j | ƒ t j | d  | d  | d d d … |
 g ƒ } t j | d  |	 d  | d  |	 d d d … g ƒ } | j t j | | g ƒ j	 ƒ  ƒ } | S(   sD   
        return Nx2 array of x,y coordinate of the boundary
        id   iÿÿÿÿi    N(
   RZ   t
   _aux_transR"   t   linspaceR\   R]   t   concatenateR7   R8   R9   (   R   t   x0R<   t   y0R=   t   trR~   R&   R*   R   R%   R)   t   xxxt   yyyt   t(    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   get_boundary¦  s    	04$N(	   R   R	   R   R   R   R™   R¦   R®   R¸   (    (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR„   ë   s   /	*	At   FloatingAxesBasec           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         O   s|   | j  d d  ƒ } | d  k r- t d ƒ ‚ n  t | d ƒ sK t d ƒ ‚ n  |  j j |  | | Ž |  j d ƒ |  j ƒ  d  S(   NR   s*   FloatingAxes requires grid_helper argumentR¸   s.   grid_helper must implement get_boundary methodg      ð?(   t   getR   t
   ValueErrort   hasattrt   _axes_class_floatingR   t
   set_aspectt   adjust_axes_lim(   R   t   klt   kwargsR   (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR   Ê  s    c         C   s4   d d l  j } |  j ƒ  } | j ƒ  } | j | ƒ S(   s[  
        Returns the patch used to draw the background of the axes.  It
        is also used as the clipping path for any data elements on the
        axes.

        In the standard axes, this is a rectangle, but in other
        projections it may not be.

        .. note::
            Intended to be overridden by new projection types.
        iÿÿÿÿN(   t   matplotlib.patchest   patchest   get_grid_helperR¸   t   Polygon(   R   t   mpatchesR   R·   (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   _gen_axes_patch×  s    c         C   s�   |  j  j |  ƒ |  j j |  j ƒ |  j  j |  ƒ } | j |  j ƒ | j t	 ƒ | j |  j
 ƒ |  j j | ƒ |  j j | ƒ | |  _ d  S(   N(   R½   t   clat   patcht   set_transformR   RÇ   t
   set_figuret   figuret   set_visiblet   FalseR   t   set_clip_patht	   gridlinest   _original_patch(   R   RÉ   (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyRÈ   è  s    c         C   sÇ   |  j  ƒ  } | j ƒ  } | d  d  … d f | d  d  … d f } } t | ƒ t | ƒ } } t | ƒ t | ƒ } } | | d }	 | | d }
 |  j | |	 | |	 ƒ |  j | |
 | |
 ƒ d  S(   Ni    i   g      Y@(   RÄ   R¸   t   mint   maxt   set_xlimt   set_ylim(   R   R   R·   R:   R;   Rh   Ri   Rj   Rk   Rg   Rf   (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR¿   ù  s    -(   R   R	   R   RÇ   RÈ   R¿   (    (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyR¹   Ç  s   			c         C   sR   t  j |  ƒ } | d  k rN t d |  j t |  f i |  d 6ƒ } | t  |  <n  | S(   Ns   Floating %sR½   (   t   _floatingaxes_classesRº   R   t   typeR   R¹   (   t
   axes_classt	   new_class(    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   floatingaxes_class_factory  s    	(   t   Axes(   t   host_axes_class_factoryc         C   sœ  d d l  } d d l } d d l m } t ƒ  j | j d d ƒ | j ƒ  } | j d ƒ } | j	 ƒ  } d d l
 m } | d d	 d
 d d g ƒ } t | d d. d | d | d | d d ƒ}	 t |  d d |	 ƒa |  j t ƒ d }
 t ƒ  j d d |
 ƒ | } | d d d g ƒ } t | d d d d |
 d |
 f d | ƒ} | j d d t ƒt j d <a t j d j j d ƒ t j d j j d  ƒ x( d d g D] } t j | j t ƒ qŸW|	 j d! d" d t d# d$ ƒt j d% <a t j d& t d' t ƒ t j j d( ƒ t j j t ƒ t j j d) ƒ t j | ƒ } d* d d+ d g d d, d d	 g } } | j | | ƒ | j | | d- ƒ \ } | j t j  ƒ d S(/   s5   
    polar projection, but in a rectangular box.
    iÿÿÿÿN(   t	   PolarAxesg     €f@g      ð?i   (   t   FixedLocatori   i   i   i   i
   R   i    ih  i   R…   R†   R‡   Rˆ   io   R   g      $@i   i<   iZ   g      @Rv   R   Rt   s   Test 1s   Test 2i   i   R   Rw   t   zt   allt   labels   z = ?s   0.5iC   iK   i   s   k-(   i    ih  i
   i   (!   t   numpyt   angle_helpert   matplotlib.projectionsRÝ   R   t   scaleR$   t   PolarTransformt
   LocatorDMSt   FormatterDMSR   RÞ   R„   R   t   FloatingSubplott   ax1t   add_subplotR™   R«   Rá   t   set_textRÍ   RÎ   t   new_floating_axist   toggleR’   R�   t	   set_colort   get_aux_axest   scattert   plotRÏ   RÉ   (   t   figR"   Rã   RÝ   R´   R…   R‡   RÞ   R†   R   t   r_scalet   tr2t   grid_helper2t   ant   ax2R~   R   Ro   (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   curvelinear_test3*  sP    &				 %c         C   s%  d d l  } d d l } d d l m } t ƒ  j | j d d ƒ | j ƒ  } | j d ƒ } | j	 ƒ  } d d l
 m } | d d	 d
 d d g ƒ } t | d d* d | d | d | d d ƒ}	 t |  d d |	 ƒa |  j t ƒ t j d j j d ƒ t j d j j d ƒ x% d g D] }
 t j |
 j t ƒ qW|	 j d d d t d d  ƒt j d! <a t j d" t d# t ƒ t j j d ƒ t j j d$ ƒ t j j t ƒ t j j d% ƒ t j | ƒ } d& d' d( d g d d d d	 g } } | j | | ƒ | j | | d) ƒ \ } | j t j  ƒ d S(+   s5   
    polar projection, but in a rectangular box.
    iÿÿÿÿN(   RÝ   g     €f@g      ð?i   (   RÞ   i   i   i   i   i
   R   ix   i   i    R…   R†   R‡   Rˆ   io   R   Rt   s   Test 1Rv   s   Test 2Ry   i   iF   R   R   Rw   Rß   Rà   Rá   s   z = ?s   0.5iC   iZ   iK   s   k-(   ix   i   i
   i    (!   Râ   Rã   Rä   RÝ   R   Rå   R$   Ræ   Rç   Rè   R   RÞ   R„   R   Ré   Rê   Rë   R«   Rá   Rì   RÍ   RÎ   Rí   Rî   R’   t   set_axis_directionR�   Rï   Rð   Rñ   Rò   RÏ   RÉ   (   Ró   R"   Rã   RÝ   R´   R…   R‡   RÞ   R†   R   R÷   Rø   R~   R   Ro   (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   curvelinear_test4…  sB    &		%t   __main__i   t   figsizei   (   i   i   (,   t   __doc__t	   itertoolsR    R   R   t	   axislinesR   R   t   axis_artistR   t   matplotlib.transformsR   R   Râ   R"   t   grid_helper_curvelinearR   R
   R�   R‚   R„   t   objectR¹   RÖ   RÚ   RÛ   t%   mpl_toolkits.axes_grid1.parasite_axesRÜ   t   FloatingAxest   matplotlib.axesR   t   maxest   subplot_class_factoryRé   Rù   Rû   R   t   matplotlib.pyplott   pyplott   pltRÌ   Ró   t   clft   show(    (    (    s_   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/mpl_toolkits/axisartist/floating_axes.pyt   <module>   s8   ÁÜD		[	@

