U
    \	a2X                     @   s   d dl mZ d dl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mZ ddlmZ dd	 ZG d
d dZG dd deeZG dd dZG dd deZeZdS )    )NumberN)_api)SubplotSpec   )SizeSubplotDividerDivider)Axesc                 C   s8   | }| }| j d j||d | j d j||d d S )NbottomZ
ticklabelslabelleft)axistoggle)ax	bottom_onleft_onZ
bottom_offZleft_off r   E/tmp/pip-unpacked-wheel-wjyw_3jo/mpl_toolkits/axes_grid1/axes_grid.py
_tick_only   s    r   c                       sb   e Zd Z fddZddddZejddd	Zejdd
d	Zdd Z	dd Z
 fddZ  ZS )CbarAxesBasec                   s$   || _ d| _d | _t j|| d S )NT)orientation_default_label_on_locatorsuper__init__)selfr   argskwargs	__class__r   r   r      s    zCbarAxesBase.__init__N)ticksc                K   sL   | j dkrd}nd}tjj| |f||d|}|j| _|j| _|   |S )Ntopr
   
horizontalvertical)r   r!   )	r   mplcolorbarZColorbarZcolorbar_cidZ_cbidlocatorr   _config_axes)r   Zmappabler!   r   r   cbr   r   r   r'      s     
  zCbarAxesBase.colorbar3.3zmappable.colorbar_cid)alternativez.colorbar().locatorc                 C   sB   | }| d |jdd jdd | j}|j| j j|d dS )zMake an axes patch and outline.FN)all)Zset_navigater   r   r   r   )r   r   br   r   r   r)   0   s
    
zCbarAxesBase._config_axesc                 C   s$   || _ | j| j }|j||d d S )Nr   )r   r   r   r   )r   r.   r   r   r   r   toggle_label8   s    zCbarAxesBase.toggle_labelc                    s   t    |   d S N)r   clar)   r   r   r   r   r1   =   s    
zCbarAxesBase.cla)__name__
__module____qualname__r   r'   r   Zdeprecate_privatize_attributeZcbidr(   r)   r/   r1   __classcell__r   r   r   r   r      s     r   c                   @   s   e Zd ZdS )CbarAxesN)r3   r4   r5   r   r   r   r   r7   B   s   r7   c                
   @   s   e Zd ZdZeZeddd)dd
ddZdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( ZdS )*Gridaq  
    A grid of Axes.

    In Matplotlib, the axes location (and size) is specified in normalized
    figure coordinates. This may not be ideal for images that needs to be
    displayed with a given aspect ratio; for example, it is difficult to
    display multiple images of a same size with some fixed padding between
    them.  AxesGrid can be used in such case.
    r+   add_allNrow{Gz?TFL)aspectc                C   s2  |\| _ | _|dkr"| j | j }n&d|  k r>| j | j ksHn td|| _ttjt|d\| _	| _
tjddg|d || _|dkr| j}n$t|ttfr|\}}tj|f|}tg g |d}t|tttfrt||f|| _nJt|d	krt|f||| _n(t|d
kr(t||f|| _ntd| j }tj| j | jfdtd}t| jD ]l}|  |\}}|r|d  }}n,|	r|d|f nd}|
r||df nd}|||||d|||f< q\|! " | _#|j$" | _%|" | _&| j%d d | _'| (  |r$| j#D ]}|)| q| *| dS )ai  
        Parameters
        ----------
        fig : `.Figure`
            The parent figure.
        rect : (float, float, float, float) or int
            The axes position, as a ``(left, bottom, width, height)`` tuple or
            as a three-digit subplot position code (e.g., "121").
        nrows_ncols : (int, int)
            Number of rows and columns in the grid.
        ngrids : int or None, default: None
            If not None, only the first *ngrids* axes in the grid are created.
        direction : {"row", "column"}, default: "row"
            Whether axes are created in row-major ("row by row") or
            column-major order ("column by column").
        axes_pad : float or (float, float), default: 0.02
            Padding or (horizontal padding, vertical padding) between axes, in
            inches.
        add_all : bool, default: True
            Whether to add the axes to the figure using `.Figure.add_axes`.
            This parameter is deprecated.
        share_all : bool, default: False
            Whether all axes share their x- and y-axis.  Overrides *share_x*
            and *share_y*.
        share_x : bool, default: True
            Whether all axes of a column share their x-axis.
        share_y : bool, default: True
            Whether all axes of a row share their y-axis.
        label_mode : {"L", "1", "all"}, default: "L"
            Determines which axes will get tick labels:

            - "L": All axes on the left column get vertical tick labels;
              all axes on the bottom row get horizontal tick labels.
            - "1": Only the bottom left axes is labelled.
            - "all": all axes are labelled.

        axes_class : subclass of `matplotlib.axes.Axes`, default: None
        aspect : bool, default: False
            Whether the axes aspect ratio follows the aspect ratio of the data
            limits.
        Nr       columnr:   )	direction)r$   r%   r=         )Zdtype)r   r   )sharexsharey)+_nrows_ncols	Exceptionngridsmapr   ZFixednpZbroadcast_to_horiz_pad_size_vert_pad_sizer   Zcheck_in_list
_direction_defaultAxesClass
isinstancelisttuple	functoolspartialdictstrr   r   r   _dividerlenr   get_positionfullobjectrange_get_col_rowZraveltolistaxes_allTaxes_columnaxes_rowaxes_llc_init_locatorsadd_axesset_label_mode)r   figrectnrows_ncolsrJ   rA   axes_padr9   	share_allshare_xshare_y
label_mode
axes_classr=   clsr   kwZ
axes_arrayicolr:   rD   rE   r   r   r   r   r   S   s`    9 

   

zGrid.__init__c                 C   s   g }g }t | jD ]6}|r&|| j |t| td}|| qg }g }t | jD ]6}|rp|| j |t| td}|| q\t | j	D ]D}| 
|\}}	| jj|| || jd |	  d}
| j| |
 q| j| | j| d S )Nr   nxny)r]   rH   appendrM   rY   r   ZScaledrG   rN   rJ   r^   rX   new_locatorr`   set_axes_locatorset_horizontalset_vertical)r   hh_ax_pos_szvv_ax_posrs   rt   r:   r(   r   r   r   re      s2    

 zGrid._init_locatorsc                 C   s4   | j dkrt|| j\}}nt|| j\}}||fS )Nr@   )rO   divmodrG   rH   )r   nrt   r:   r   r   r   r^      s    
zGrid._get_col_rowc                 C   s
   t | jS r0   )rY   r`   r2   r   r   r   __len__   s    zGrid.__len__c                 C   s
   | j | S r0   )r`   )r   rs   r   r   r   __getitem__   s    zGrid.__getitem__c                 C   s   | j | jfS )zV
        Return the number of rows and columns of the grid as (nrows, ncols).
        )rG   rH   r2   r   r   r   get_geometry   s    zGrid.get_geometryc                 C   s   |d | j _|d | j_dS )z
        Set the padding between the axes.

        Parameters
        ----------
        axes_pad : (float, float)
            The padding (horizontal pad, vertical pad) in inches.
        r   r   NrM   
fixed_sizerN   )r   rk   r   r   r   set_axes_pad   s    	zGrid.set_axes_padc                 C   s   | j j| jjfS )z
        Return the axes padding.

        Returns
        -------
        hpad, vpad
            Padding (horizontal pad, vertical pad) in inches.
        r   r2   r   r   r   get_axes_pad  s    	zGrid.get_axes_padc                 C   s   | j | dS )z%Set the aspect of the SubplotDivider.N)rX   
set_aspect)r   r=   r   r   r   r     s    zGrid.set_aspectc                 C   s
   | j  S )z(Return the aspect of the SubplotDivider.)rX   
get_aspectr2   r   r   r   r     s    zGrid.get_aspectc                 C   s   |dkr"| j D ]}t|dd qn|dkr| jd dd D ]}t|ddd q<| jd d }t|ddd | jd	d D ]:}|dd D ]}t|ddd q|d }t|ddd qzn6|d
kr| j D ]}t|ddd q| j}t|ddd dS )a  
        Define which axes have tick labels.

        Parameters
        ----------
        mode : {"L", "1", "all"}
            The label mode:

            - "L": All axes on the left column get vertical tick labels;
              all axes on the bottom row get horizontal tick labels.
            - "1": Only the bottom left axes is labelled.
            - "all": all axes are labelled.
        r-   Fr<   r   NrF   T)r   r   r   1)r`   r   rb   rd   )r   moder   rt   r   r   r   rg     s$    

zGrid.set_label_modec                 C   s   | j S r0   )rX   r2   r   r   r   get_divider@  s    zGrid.get_dividerc                 C   s   | j | d S r0   )rX   Zset_locator)r   r(   r   r   r   rz   C  s    zGrid.set_axes_locatorc                 C   s
   | j  S r0   )rX   Zget_locatorr2   r   r   r   get_axes_locatorF  s    zGrid.get_axes_locatorc                 C   s
   | j  S r0   )rX   get_vsize_hsizer2   r   r   r   r   I  s    zGrid.get_vsize_hsize)	Nr:   r;   TFTTr<   N)r3   r4   r5   __doc__r	   rP   r   delete_parameterr   re   r^   r   r   r   r   r   r   r   rg   r   rz   r   r   r   r   r   r   r8   F   s:   

         q	)r8   c                       s6   e Zd ZeZeddd fdd	Zdd Z  Z	S )	ImageGridr+   r9   Nr:   r;   TFr<   right5%c                    s"  || _ || _|| _|| _|rBt j|||||||dd|	|
|d n&t j||||||||dd|	|
|d |r| jD ]}|| qr|r| j dkr| jD ]}| jd |_	qnr| j dkrt
| jD ]:\}}| |\}}| jdkr| j| |_	q| j| |_	qn t| j| jD ]\}}||_	qdS )	a	  
        Parameters
        ----------
        fig : `.Figure`
            The parent figure.
        rect : (float, float, float, float) or int
            The axes position, as a ``(left, bottom, width, height)`` tuple or
            as a three-digit subplot position code (e.g., "121").
        nrows_ncols : (int, int)
            Number of rows and columns in the grid.
        ngrids : int or None, default: None
            If not None, only the first *ngrids* axes in the grid are created.
        direction : {"row", "column"}, default: "row"
            Whether axes are created in row-major ("row by row") or
            column-major order ("column by column").  This also affects the
            order in which axes are accessed using indexing (``grid[index]``).
        axes_pad : float or (float, float), default: 0.02in
            Padding or (horizontal padding, vertical padding) between axes, in
            inches.
        add_all : bool, default: True
            Whether to add the axes to the figure using `.Figure.add_axes`.
            This parameter is deprecated.
        share_all : bool, default: False
            Whether all axes share their x- and y-axis.
        aspect : bool, default: True
            Whether the axes aspect ratio follows the aspect ratio of the data
            limits.
        label_mode : {"L", "1", "all"}, default: "L"
            Determines which axes will get tick labels:

            - "L": All axes on the left column get vertical tick labels;
              all axes on the bottom row get horizontal tick labels.
            - "1": Only the bottom left axes is labelled.
            - "all": all axes are labelled.

        cbar_mode : {"each", "single", "edge", None}, default: None
            Whether to create a colorbar for "each" axes, a "single" colorbar
            for the entire grid, colorbars only for axes on the "edge"
            determined by *cbar_location*, or no colorbars.  The colorbars are
            stored in the :attr:`cbar_axes` attribute.
        cbar_location : {"left", "right", "bottom", "top"}, default: "right"
        cbar_pad : float, default: None
            Padding between the image axes and the colorbar axes.
        cbar_size : size specification (see `.Size.from_any`), default: "5%"
            Colorbar size.
        cbar_set_cax : bool, default: True
            If True, each axes in the grid has a *cax* attribute that is bound
            to associated *cbar_axes*.
        axes_class : subclass of `matplotlib.axes.Axes`, default: None
        T)rA   rk   rl   rm   rn   r=   ro   rp   )	rA   rk   r9   rl   rm   rn   r=   ro   rp   singler   edger   r   N)_colorbar_mode_colorbar_location_colorbar_pad_colorbar_sizer   r   	cbar_axesrf   r`   cax	enumerater^   zip)r   rh   ri   rj   rJ   rA   rk   r9   rl   r=   ro   Z	cbar_modeZcbar_locationZcbar_padZ	cbar_sizeZcbar_set_caxrp   r   indexrt   r:   r   r   r   r   r   R  sb    D                 




zImageGrid.__init__c                    s~   j d kr* jdkr  jj _ n
 jj _  fddt jD  _ j} j}g }g }g }g }|dkrb|dkrb|dkrʈ j	t
 j }|t
 j| |t
 j |  jjdddd	}nV|d
kr  jt
 j }|t
 j| |t
 j |  jjdddd}t jD ]}	 j|	 d q* jd |  jd d t jd D ]0\}
}|r| j |rt
j|d jd d}nt
j jd d jd d}|dkr$|dks|dkr$|
dkr$|t| |t
 j| |t
 j | |t| || |dkrp|dksj|dkrp|
 jd krp|t
 j | |t| |t
 j| qpg }g }t jd d d d D ]0\}}|r| j |rt
j|d jd d}nt
j jd d jd d}|d
krx|dksB|dkrx|dkrx|t| |t
 j| |t
 j | |t| || |dkr|dks|dkr| j	d kr|t
 j | |t| |t
 j| qt jD ]~}	 |	\}
} jj||
 | j	d |  d} j|	 | |dkr|dkr jj||
 | j	d |  d}n,|dkr jj||
 | j	d |  d} j|	 | n|dkr|dkr|
dks|dkr*|
 jd kr* jj|d | j	d |  d} j| | nV|d
krD| j	d ksX|dkr|dkr jj||
 |d d} j|
 | q|dkr|dkr j	t
 j }|t
 j | |t
 j|  jjdddd	}nV|dkr< jt
 j }|t
 j | |t
 j|  jjdddd}|dkrbt jD ]}	 j|	 d qP jd |  jd d n|dkrt jD ]}	 j|	 d qn|dkr$|dkrԈ j	}n j}t|D ]}	 j|	 d qt|	d  jD ]} j| d q
n>t jD ]2}	 j|	 d  j|	 jddddgdd q. j|  j| d S )Nr   c                    s,   g | ]$} j  jd  j j  jdqS )r   )r   )_defaultCbarAxesClassr`   figurerX   rZ   r   ).0r   r2   r   r   
<listcomp>  s   
 z,ImageGrid._init_locators.<locals>.<listcomp>r   )r   r
   r   r   rF   )rv   rw   Zny1r
   )rv   Znx1rw   FTZaxes)r=   Zref_axZeachr   r   r   r#   ru   )r   r   r"   )r   r#   g      ?gMbP?active)which)r   r   rM   r   rN   r]   rJ   r   r   rG   r   ZAxesXrd   rx   Zfrom_anyr   rX   ry   rH   ZAxesYZset_visiblerz   r   rc   r`   rY   rb   r^   Zset_positionr{   r|   )r   Zcb_modeZcb_locationr}   r   r~   Zh_cb_posr   r(   rs   rt   r   r   Zv_cb_posr:   countjr   r2   r   re     sH   




 


" 




 
 
 







zImageGrid._init_locators)Nr:   r;   TFTr<   Nr   Nr   TN)
r3   r4   r5   r7   r   r   r   r   re   r6   r   r   r   r   r   M  s"   
             ir   )Znumbersr   rT   ZnumpyrL   Z
matplotlibr&   r   Zmatplotlib.gridspecr   Zaxes_dividerr   r   r   Zmpl_axesr	   r   r   r7   r8   r   ZAxesGridr   r   r   r   <module>   s"   -  	  