
    G8c3                         d Z ddlZddlmZ ddlZddlZddlmZ ddl	m
Z
 ddlmZmZ ddlmZmZ dd	lmZ dd
lmZ  G d dej*                        Z G d dej.                        Z G d de      Zy)z/
An experimental support for curvilinear grid.
    N)chain)_api)Path)Affine2DIdentityTransform   )AxisArtistHelperGridHelperBase)
AxisArtist)
GridFinderc                   h     e Zd ZdZd fd	Zd Z ej                  d      dd       Zd Z	d Z
 xZS )	FixedAxisArtistHelperz(
    Helper class for a fixed axis.
    c                 l    t         |   |       || _        || j                  }|| _        || _        y)}
        nth_coord = along which coordinate value varies.
         nth_coord = 0 ->  x axis, nth_coord = 1 -> y axis
        )locN)super__init__grid_helper	nth_coordnth_coord_ticksside)selfr   r   r   	__class__s       Q/usr/lib/python3/dist-packages/mpl_toolkits/axisartist/grid_helper_curvelinear.pyr   zFixedAxisArtistHelper.__init__   s;     	T"&""nnO.	    c                 :    | j                   j                  |       y N)r   
update_limr   axess     r   r   z FixedAxisArtistHelper.update_lim'   s    ##D)r   3.5c                 ^    |d| j                   z
  | _         y |dv r|| _         y t        d      )Nr   r   r   zwrong coord number)r   	Exception)r   coord_numbers     r   change_tick_coordz'FixedAxisArtistHelper.change_tick_coord*   s7    #$t';';#;D V##/D 011r   c                     |j                   S r   	transDatar   s     r   get_tick_transformz(FixedAxisArtistHelper.get_tick_transform3       ~~r   c                 r   | j                   dk(  r|j                         n|j                         \  }}||kD  rddddd| j                     }n| j                  }| j                  }|j                  | j                  |      }|j                  d| j                  z
  |d	      }t        ||      t        g       fS )
z tick_loc, tick_angle, tick_labelr   rightleftbottomtop)r.   r-   r0   r/   r   T)minor)	r   get_ylimget_xlimr   r   get_tick_iteratorr   r   iter)r   r    v1v2r   gti1ti2s           r   get_tick_iteratorsz(FixedAxisArtistHelper.get_tick_iterators6   s    $(NNa$7T]]_B7#f#u66:iiAD 99D!!$"6"6=!!!D$8$8"8$d!KS#R((r   r   )__name__
__module____qualname____doc__r   r   r   
deprecatedr&   r*   r;   __classcell__r   s   @r   r   r      s;    * T__U2 2)r   r   c                   t     e Zd Z ej                  d      Zd fd	Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Z xZS )FloatingAxisArtistHelperr!   c                     t         |   ||       || _        || _        t        j
                   t        j
                  f| _        d| _        y)r   d   N)r   r   valuer   npinf	_extremes_line_num_points)r   r   r   rG   axis_directionr   s        r   r   z!FloatingAxisArtistHelper.__init__G   s@    
 	E*
&&&"&& #r   c                 `    |t         j                   }|t         j                  }||f| _        y r   )rH   rI   rJ   )r   e1e2s      r   set_extremesz%FloatingAxisArtistHelper.set_extremesR   s+    :&&B:BRr   c           	         | j                   j                  |       |j                         \  }}|j                         \  }}| j                   j                  }|j                  |j                  ||||      }|\  }}	}
}| j                  \  }}| j                  dk(  rt        ||
      }
t        ||      }n'| j                  dk(  rt        ||      }t        ||	      }	|j                  ||	      \  }}}|j                  |
|      \  }}}| j                  dk(  rat        j                  | j                  | j                         }t        j"                  |
|| j                        }|j%                  ||      \  }}no| j                  dk(  r`t        j"                  ||	| j                        }t        j                  | j                  | j                         }|j%                  ||      \  }}||	|
|f||t        j&                  |      f||t        j&                  |      f|j)                  d||      |j+                  d||      fd| _        y )Nr   r   r/   )extremeslon_infolat_info
lon_labels
lat_labelsline_xy)r   r   r3   r2   grid_finderextreme_finderinv_transform_xyrJ   r   maxmingrid_locator1grid_locator2rH   fullrK   rG   linspacetransform_xyasarraytick_formatter1tick_formatter2
_grid_info)r   r    x1x2y1y2rX   rR   lon_minlon_maxlat_minlat_maxe_mine_maxlon_levslon_n
lon_factorlat_levslat_n
lat_factorxx0yy0xxyys                           r   r   z#FloatingAxisArtistHelper.update_limY   s   ##D)BB&&22--k.J.J.0"b"> .6*'7~~u>>Q%)G%)G^^q %)G%)G %%gw7 	$% %%gw7 	$% >>Q''$//<C++gw0E0EFC --c37FB^^q ++gw0E0EFC''$//<C --c37FB !'7G<!5"**Z*@A!5"**Z*@A%55*h0%55*h0Bx	
r   c                     t               S r   )r   r   s     r   get_axislabel_transformz0FloatingAxisArtistHelper.get_axislabel_transform   s
    zr   c                 R   | j                   d   }| j                  dk(  r4| j                  }|d   |d   z   dz  }d}t        |d   |d   z
        dz  }nB| j                  dk(  r3|d   |d   z   dz  }| j                  }t        |d   |d   z
        dz  }d}| j                  j
                  }|j                  gg      \  \  }\  }	|j                  |j                  z
  }
|
j                  ||	g      }d|d   cxk  rdk  rn yd|d   cxk  rdk  rn y|j                  j                  ||	g      \  }}|j                  |z   g|z   g      \  \  }\  }|j                  j                  ||g      \  }}||ft        j                  t        j                  ||z
  ||z
              fS y)NrR   r         i  r   )NN)re   r   rG   absr   rX   ra   r)   	transAxes	transformrH   rad2degarctan2)r   r    rR   rv   rw   dxxdyyrX   xx1yy1data_to_axespxx1cyy1cxx2yy2xx2cyy2cs                     r   get_axislabel_pos_anglez0FloatingAxisArtistHelper.get_axislabel_pos_angle   s   ??:.>>Q**CA;!,1CChqkHQK/047C^^q A;!,1C**ChqkHQK/047CC&&22$113%#?~~6""C:.!>>   1Q4n1n  113*=JD$(55sSykC#I;ONFSFS113*=JD$$<BJJtDy$t),L!MMMr   c                     t               S r   )r   r   s     r   r*   z+FloatingAxisArtistHelper.get_tick_transform   s     ""r   c                      j                   j                   j                  d   \  }}}||z  }d|z  } j                  d   \  }}}	||	z  }
d|	z  } j                  \  }} j                  dk(  r||k  ||k  z  }||   }n j                  dk(  r||
k  |
|k  z  }|
|   }
fd} j                  dk(  rt        j                  | j                        }
 ||
|      \  |
j                         }||
|z   |kD  xx   |z  cc<    |||      \   |||z   |      \   ||
|      \   ||
||z         \   j                  d   t              D cg c]
  \  }}|s	| c}}nŉ j                  dk(  rt        j                  |
 j                        } ||
|      \   ||
|      \   ||
||z         \  |
j                         }||
|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_labelrT   g{Gz?rS   r   r   c                     j                         j                  z   }|j                  t        j                  | |g            j
                  S r   )get_transformr)   r   rH   column_stackT)xytrfr    rX   s      r   ra   zAFloatingAxisArtistHelper.get_tick_iterators.<locals>.transform_xy   s<    ++->C==!Q!89;;;r   rV   rU   c               3   6  K   t        j                  z
  z
        } t        j                  z
  z
        }k(  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   )rH   r   pir*   r   	functoolspartialmpl
transforms_interval_contains_closezipr   r   )dddd2mmtick_to_axesin_01r   r   dd2labc2d1r    labelsr   r   xx1axx1bxx2axx2br   yy1ayy1byy2ayy2bs               r   f1z7FloatingAxisArtistHelper.get_tick_iterators.<locals>.f1   s    DItDy1B**T$YT	2C$,44<0B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2'D)r   rX   re   rJ   r   rH   	full_likerG   copyr   r5   ) r   r    rs   rt   ru   rw   dyrp   rq   rr   rv   dxe0rN   maskra   xx00lmr   rX   r   r   r   r   r   r   r   r   r   r   r   s    ``                  @@@@@@@@@@@@r   r;   z+FloatingAxisArtistHelper.get_tick_iterators   s    &&22&*ooj&A#%#J&*ooj&A#%#JB>>Q#I#),Dd)C^^q #I#),Dd)C	<
 >>Q,,sDJJ/C#C-HC88:DrB2%%dC0JD$%d2gs3JD$%c3/JD$%c3r62JD$__\2F$'$5;DAqa;F^^q ,,sDJJ/C#C-HC%c3/JD$%c3r62JD$88:DrB2%%dC0JD$%d2gs3JD$__\2F$'$5;DAqa;F	. 	. 	. tT"X~C <  <s   %
I!0I!+
I'6I'c                     |j                   S r   r(   r   s     r   get_line_transformz+FloatingAxisArtistHelper.get_line_transform   r+   r   c                     | j                  |       | j                  d   \  }}t        t        j                  ||g            S )NrW   )r   re   r   rH   r   )r   r    r   r   s       r   get_linez!FloatingAxisArtistHelper.get_line   s8    y)1BOOQF+,,r   r   )r<   r=   r>   r   deprecate_privatize_attribute	grid_infor   rP   r   r{   r   r*   r;   r   r   rA   rB   s   @r   rD   rD   D   sE    22259I	$ )
V:#L\-r   rD   c                        e Zd Z ej                  d      Z	 	 	 	 	 d	 fd	Zd
dZ	 	 	 	 ddZ	 	 ddZ	d Z
ddZddZ xZS )GridHelperCurveLinearr!   c                 h    t         |           d| _        || _        t	        ||||||      | _        y)a  
        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)``
        N)r   r   re   
_aux_transr   rX   )r   	aux_transrY   r]   r^   rc   rd   r   s          r   r   zGridHelperCurveLinear.__init__  s<      	#%i&4&3&3&5&57r   c                     || j                   j                  |        | j                   j                  di | d | _        y )N )rX   update_transformupdate_old_limits)r   r   kwargss      r   update_grid_finderz(GridHelperCurveLinear.update_grid_finder  s=     --i8)&)r   c                 b    || j                   }||}t        | ||      }t        |||      }|S )N)r   )rL   )r    r   r   )r   r   r   rL   offsetr    _helperaxislines           r   new_fixed_axisz$GridHelperCurveLinear.new_fixed_axis!  s@    
 <99D! N'c9MdGNK r   c                     || j                   }t        | |||      }t        ||      }|j                  j	                  d       |j                  j                  |j                   j                         |S )NT)r    rD   r   lineset_clip_onset_clip_boxbbox)r   r   rG   r    rL   r   r   s          r   new_floating_axisz'GridHelperCurveLinear.new_floating_axis0  sj     <99D*)UN4 dG, 	!!$'""8==#5#56 r   c                 J    | j                   j                  ||||      | _        y r   )rX   get_grid_infore   )r   rf   rh   rg   ri   s        r   _update_gridz"GridHelperCurveLinear._update_gridL  s     **88RRHr   c                     g }|dv r(| j                   d   d   D ]  }|j                  |        |dv r(| j                   d   d   D ]  }|j                  |        |S )N)bothr   lonlines)r   r   lat)re   extend)r   whichaxis
grid_linesgls        r   get_gridlinesz#GridHelperCurveLinear.get_gridlinesO  ss    
= ooe,W5 &!!"%&= ooe,W5 &!!"%&r   c              #   `  K   t        dddd      |   }ddg|   }|sHt        | j                  |   d   |   | j                  |   d   |         D ]  \  \  }}}|}	||	||f  y t        | j                  |   d   |   | j                  |   d   |         D ]  \  \  }}}|}	||	|df  y w)	NZ   r   )r.   r-   r/   r0   r   r   	tick_locstick_labels )dictr   re   )
r   r   	axis_sider1   angle_tangent
lon_or_latxyar   angle_normals
             r   r4   z'GridHelperCurveLinear.get_tick_iteratorY  s      "Bqa@KU^I.
!OOJ/<YGOOJ/>yIK 9
Q  !,q88	9 "OOJ/<YGOOJ/>yIK :
Q  !,r99	:s   B,B.)NNNNNr   )NNNN)Nr/   )majorr   )F)r<   r=   r>   r   r   r   r   r   r   r   r   r   r4   rA   rB   s   @r   r   r      s`    22259I !%##!%!%74  "&&*" 	"  $)18I:r   r   )r?   r   	itertoolsr   numpyrH   
matplotlibr   r   matplotlib.pathr   matplotlib.transformsr   r   	axislinesr	   r
   axis_artistr   rX   r   Fixedr   FloatingrD   r   r   r   r   <module>r      sb           = 7 # #.),22 .)bw-/88 w-tl:N l:r   