
    G8c/                        d Z ddlZddlZddlZddlmZmZ ddlm	Z
 ddlm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  G d
 dej2                        Z G d dej2                        Z G d de      Z G d dej8                        Z G d d      Z ej<                  ed      Z e eej@                              Z! e
jD                  e!      Z#y)z/
An experimental support for curvilinear grid.
    N)_apicbook)Path)host_axes_class_factory   )	axislinesgrid_helper_curvelinear)
AxisArtist)ExtremeFinderSimplec                       e Zd Zy)FloatingAxisArtistHelperN)__name__
__module____qualname__     G/usr/lib/python3/dist-packages/mpl_toolkits/axisartist/floating_axes.pyr   r      s    r   r   c                   2     e Zd Zd fd	Zd Zd Zd Z xZS )FixedAxisArtistHelperc                     |j                  |      \  }}t        | 	  ||||       ||}|| _        || _        || _        || _        y)z}
        nth_coord = along which coordinate value varies.
         nth_coord = 0 ->  x axis, nth_coord = 1 -> y axis
        axis_directionN)get_data_boundarysuper__init__nth_coord_ticksvaluegrid_helper_side)selfr   sider   r   	nth_coord	__class__s         r   r   zFixedAxisArtistHelper.__init__    sY    
 '88>yitL"'O.
&
r   c                 p    | j                   j                  |       | j                   j                  | _        y N)r   
update_lim
_grid_info)r    axess     r   r&   z FixedAxisArtistHelper.update_lim/   s)    ##D)**55r   c                     !"#  j                   j                   j                  d   \  }}}||z  }d|z  } j                  d   \  }}}	||	z  }
d|	z  } j                   j                  }t	        |dd       \  }}t	        |dd       \  }}fd} j
                  dk(  r||k  ||k  z  }||   }t        j                  | j                        }
 ||
|      \  |
j                  t        d	      }||
|z   |kD  xx   |z  cc<    |||      \    |||z   |      \  !|j                  t        d	      }|||z   |kD  xx   |z  cc<    ||
|      \  " ||
||z         \  # j                  d
   t        |      D cg c]
  \  }}|s	| c}}n j
                  dk(  r||
k  |
|k  z  }|
|   }
t        j                  |
 j                        } ||
|      \  |j                  t        d	      }|||z   |kD  xx   |z  cc<    ||
|      \    ||
||z         \  !|
j                  t        d	      }||
|z   |kD  xx   |z  cc<    |||      \  " |||z   |      \  # j                  d   t        |      D cg c]
  \  }}|s	| c}}  !"#fd} |       t        g       fS c c}}w c c}}w )z9tick_loc, tick_angle, tick_label, (optionally) tick_labellat_infogMbP?lon_infoN   c                     j                         j                  z   }|j                  t        j                  | |g            j
                  S r%   )get_transform	transData	transformnpcolumn_stackT)xytrfr(   grid_finders      r   transform_xyz>FixedAxisArtistHelper.get_tick_iterators.<locals>.transform_xyD   s<    ++->C==!Q!89;;;r   r   T)copy
lat_labelsr   
lon_labelsc               3   B  K   t        j                  z
  z
        } t        j                  z
  z
        }z
  dk(  z
  dk(  z  }||   t         j                  dz  z   | |<   j                        j                  z
  }t        j                  t        j                  j                  d      }t        | |      D ]W  \  }}}}}	|j                  ||f      }
 ||
d         s( ||
d         s4t        j                  ||g      \  }}||g|||	f Y y w)Nr   r,   )r   r   r   )r1   arctan2piget_tick_transform	transAxes	functoolspartialmpl
transforms_interval_contains_closezipr0   rad2deg)dddd2mmtick_to_axesin_01r4   r5   dd2labc2d1r(   labelsr    xx1xx1axx1bxx2axx2byy1yy1ayy1byy2ayy2bs               r   f1z4FixedAxisArtistHelper.get_tick_iterators.<locals>.f1n   s    D4K5B**TD[$+6C+"td{a'78BWruuqy(BrF22484>>IL%%77AE$'S"c6$B . 1aS!++QF3A<E"Q%LZZB0FBa&"b#--	.s   C(D,D8'D)r   r7   r'   	_extremessortedr"   r1   	full_liker   astypefloatrF   iter)$r    r(   lat_levslat_n
lat_factoryy0dylon_levslon_n
lon_factorxx0dxextremesxminxmaxyminymaxr8   maskxx00yy00lmr]   r7   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   s$   ``                      @@@@@@@@@@@@r   get_tick_iteratorsz(FixedAxisArtistHelper.get_tick_iterators3   s    &&22&*ooj&A#%#Z&*ooj&A#%#Z##--HRaL)
dHQRL)
d	< >>QCKC4K0Dd)C,,sDJJ/C#C-HC::e$:/DrD!R'!%dC0JD$%dRi5JD$::e$:/DrD!R'!%c40JD$%c4"95JD$__\2F$'$5;DAqa;F^^q CKC4K0Dd)C,,sDJJ/C#C-HC::e$:/DrD!R'!%c40JD$%c4"95JD$::e$:/DrD!R'!%dC0JD$%dRi5JD$__\2F$'$5;DAqa;F	. 	. 	. tT"X~I <& <s   
KK
K#Kc                     | j                  |       t        dddd      | j                     \  }}| j                  |   |   \  }}t	        t        j                  ||g            S )N)
lon_lines0r   )rz   r   )
lat_lines0r   )r{   r   leftrightbottomtop)r&   dictr   r'   r   r1   r2   )r    r(   kvxxyys         r   get_linezFixedAxisArtistHelper.get_line   sg    *+,)+ ,0::71 #A&BBOORH-..r   r%   )r   r   r   r   r&   rx   r   __classcell__r#   s   @r   r   r      s    6JX/r   r   c                       e Zd Zd Zd Zy)ExtremeFinderFixedc                     || _         y)z
        This subclass always returns the same bounding box.

        Parameters
        ----------
        extremes : (float, float, float, float)
            The bounding box that this helper always returns.
        Nr^   )r    rn   s     r   r   zExtremeFinderFixed.__init__   s     "r   c                     | j                   S r%   r   )r    r8   x1y1x2y2s         r   __call__zExtremeFinderFixed.__call__   s    ~~r   N)r   r   r   r   r   r   r   r   r   r      s    	"r   r   c                   |     e Zd Z	 	 	 	 d fd	Zd Z	 	 	 	 ddZd Zd	dZ ej                  d      d        Z
 xZS )
GridHelperCurveLinearc                 T    || _         t        |      }t        |   ||||||       y )N)grid_locator1grid_locator2tick_formatter1tick_formatter2)r^   r   r   r   )	r    	aux_transrn   r   r   r   r   extreme_finderr#   s	           r   r   zGridHelperCurveLinear.__init__   s9     "+H5''4'4)8)8 	 	:r   c                 X    | j                   \  }}}}t        |df|df|df|df      |   S )z$
        Return v=0, nth=1.
        r   r   r|   )r^   r   )r    r!   lon1lon2lat1lat2s         r   r   z'GridHelperCurveLinear.get_data_boundary   sH     "&dD$$) !9q	# $() 	)r   c                     || j                   }||}t        | ||      }t        |||      }|j                  j	                  d       |j                  j                  |j                   j                         |S )N)r   r   T)r(   r   r
   lineset_clip_onset_clip_boxbbox)r    locr"   r   offsetr(   _helperaxislines           r   new_fixed_axisz$GridHelperCurveLinear.new_fixed_axis   sq    
 <99D! N (#y2dGNK!!$'""8==#5#56r   c                    | j                   t               | _         | j                   }| j                  }|j                  |j                  ||||      }t        |d d       \  }}	t        |dd        \  }
}||	|
|f|d<   |j                  ||	      \  }}}t        j                  |      }|j                  |
|      \  }}}t        j                  |      }|||f|d<   |||f|d<   |j                  d||      |d<   |j                  d||      |d<   |d | |z  }|d | |z  }|j                  |||k  ||	k  z     ||
|k  ||k  z     ||	|
|      \  }}||d<   ||d	<    |j                  |d d |dd  g| \  }}||d
<   ||d<   y )Nr,   rn   r+   r*   r   r;   r:   	lon_lines	lat_linesrz   r{   )r'   r   r7   r   inv_transform_xyr_   r   r1   asarrayr   r   r   _get_raw_grid_lines)r    r   r   r   r   	grid_infor7   rn   lon_minlon_maxlat_minlat_maxri   rj   rk   rd   re   rf   
lon_values
lat_valuesr   r   s                         r   _update_gridz"GridHelperCurveLinear._update_grid   s   ??""fDOOO	&&--k.J.J.0"b"> "(2A,/!(12,/ ''7 B	* %%gw7 	$%::h'%%gw7 	$%::h' (% ;	* (% ;	*"-"="=j(#,	,"-"="=j(#,	, fu%
2
fu%
2
*>>*,g1EFG*,g1EFGWgw 0	9
 "+	+!*	+>{>>RaL(12, 3)1 3	9 #,	,"+	,r   c                     g }|dv r|j                  | j                  d          |dv r|j                  | j                  d          |S )N)bothr4   r   )r   r5   r   )extendr'   )r    whichaxis
grid_liness       r   get_gridlinesz#GridHelperCurveLinear.get_gridlines  sK    
= dook:;= dook:;r   z3.5c           	      *   | j                   \  }}}}t        j                  ||d      }t        j                  ||      }t        j                  ||      }t        j                  ||d      }t        j                  ||      }	t        j                  ||      }
t        j                  |dd |
dd |ddd   |	g      }t        j                  |dd |dd |dd |ddd   g      }| j
                  j                  t        j                  ||g            S )zK
        Return (N, 2) array of (x, y) coordinate of the boundary.
        d   Nr   )r^   r1   linspacer`   concatenate
_aux_transr0   r2   )r    x0r   y0r   r   rg   rX   r   rl   rS   xxxyyys                r   get_boundaryz"GridHelperCurveLinear.get_boundary  s    
 BB[[R%ll2r"ll2r"[[R%ll2r"ll2r"nnb"gs3BxBqGcBCnnc#2h3BSb2dd8DE((#s)DEEr   )NNNN)majorr   )r   r   r   r   r   r   r   r   r   
deprecatedr   r   r   s   @r   r   r      s[      $#!%!%	:) "&&*" 	P-,^ T__UF Fr   r   c                   4     e Zd Z fdZd Z fdZd Z xZS )FloatingAxesBasec                    t        j                  t        |       t        |   |d|i| | j                  d       | j                          y )N)r   r   g      ?)r   check_isinstancer   r   r   
set_aspectadjust_axes_lim)r    r   argskwargsr#   s       r   r   zFloatingAxesBase.__init__,  sC    3M$BKB6Br   c                     t        | j                         j                  g d      \  \  }}\  }}\  }}\  }}t        j                  ||f||f||f||fg      }d|j                         _        |S )Nr|   r   )mapget_grid_helperr   mpatchesPolygonget_path_interpolation_steps)r    r   _r   r   r   patchs          r   _gen_axes_patchz FloatingAxesBase._gen_axes_patch2  s{     .1  "44..0*Q"a'2q7B   2r(RHr2hR!IJ03-r   c                    t         |           | j                  j                  | j	                         j
                  j                         | j                  z          t         | !         }|j                  | j                         |j                  | j                         | j                  j                  |       | j                  j                  |       y r%   )r   clearr   set_transformr   r7   r.   r/   r   
set_figurefigurer@   set_clip_path	gridlines)r    
orig_patchr#   s     r   r   zFloatingAxesBase.clear<  s    

    "..<<>nn	
 W,.
dkk*  0

  ,$$Z0r   c                 \   | j                   j                         j                  | j                   j                         | j                  z
        }|j                  dd      }| j                  |j                  |j                         | j                  |j                  |j                         y )NgRQ?)r   r   get_extentsr.   r/   expandedset_xlimro   rp   set_ylimrq   rr   )r    r   s     r   r   z FloatingAxesBase.adjust_axes_limI  sv    zz""$00JJ$$&79 }}T4(dii+dii+r   )r   r   r   r   r   r   r   r   r   s   @r   r   r   *  s    1,r   r   z
Floating{})$__doc__rA   numpyr1   
matplotlibrC   r   r   matplotlib.axesr(   maxesmatplotlib.patchespatchesr   matplotlib.pathr   %mpl_toolkits.axes_grid1.parasite_axesr    r   r	   axis_artistr
   r7   r   r   r   r   r   r   _make_class_factoryfloatingaxes_class_factoryAxesFloatingAxessubplot_class_factoryFloatingSubplotr   r   r   <module>r      s       "  %   I 0 # ,	88	
h/3LL h/V, &KF3II KF\%, %,P 7U66l$ )INN+--%--l;r   