U
    Âmœd‘V  ã                   @   s    d dl m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mZmZ ddlmZ dd	„ ZG d
d„ dƒZe ed¡ZG dd„ dƒZG dd„ deƒZeZdS )é    )ÚNumberN)Ú_apiÚcbook)Ú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   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/mpl_toolkits/axes_grid1/axes_grid.pyÚ
_tick_only   s    r   c                       s>   e Zd Z‡ fdd„Zddœdd„Zdd„ Z‡ fd	d
„Z‡  ZS )ÚCbarAxesBasec                   s   || _ tƒ j||Ž d S ©N)ÚorientationÚsuperÚ__init__)Úselfr   ÚargsÚkwargs©Ú	__class__r   r   r      s    zCbarAxesBase.__init__N)Úticksc                K   s2   | j dkrdnd}| jj|f| ||dœ|—Ž}|S )N©Útopr   Ú
horizontalÚvertical)Úcaxr   r!   )r   ÚfigureÚcolorbar)r   Zmappabler!   r   r   Úcbr   r   r   r(      s    þÿÿzCbarAxesBase.colorbarc                 C   s   | j | j }|j||d� d S )Nr   )r   r   r   )r   Úbr   r   r   r   Útoggle_label!   s    zCbarAxesBase.toggle_labelc                    s   | j }tƒ  ¡  || _ d S r   )r   r   Úcla)r   r   r   r   r   r,   %   s    
zCbarAxesBase.cla)Ú__name__Ú
__module__Ú__qualname__r   r(   r+   r,   Ú__classcell__r   r   r   r   r      s   r   zCbar{}c                   @   s–   e Zd ZdZeZd%dd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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.
    NÚrowç{®Gáz”?FTÚL)Ú	share_allÚshare_xÚshare_yÚ
label_modeÚ
axes_classÚaspectc                C   s>  |\| _ | _|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fƒrät||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< �qZ|j!| jdk�rÜdndd� "¡ | _#|j$ "¡ | _%| "¡ | _&| j%d d | _'|  (¡  | j#D ]}| )|¡ �q|  *|
¡ dS )aÂ  
        Parameters
        ----------
        fig : `.Figure`
            The parent figure.
        rect : (float, float, float, float), (int, int, int), int, or     `~.SubplotSpec`
            The axes position, as a ``(left, bottom, width, height)`` tuple,
            as a three-digit subplot position code (e.g., ``(1, 2, 1)`` or
            ``121``), or as a `~.SubplotSpec`.
        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.02
            Padding or (horizontal padding, vertical padding) between axes, in
            inches.
        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", "keep"}, 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.
            - "keep": Do not do anything.

        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   z7ngrids must be positive and not larger than nrows*ncolsé   Úcolumnr2   )Ú	direction)r$   r%   r:   é   é   zIncorrect rect format)Zdtype)r   r   )ÚsharexÚshareyÚCÚF)Úorderéÿÿÿÿ)+Ú_nrowsÚ_ncolsÚ
ValueErrorÚngridsÚmapr   ZFixedÚnpZbroadcast_toÚ_horiz_pad_sizeÚ_vert_pad_sizer   Úcheck_in_listÚ
_directionÚ_defaultAxesClassÚ
isinstanceÚlistÚtupleÚ	functoolsÚpartialÚdictr   r   r   Ú_dividerÚlenr	   Ú	TypeErrorÚ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_ncolsrI   r=   Úaxes_padr5   r6   r7   r8   r9   r:   Úclsr   ÚkwZ
axes_arrayÚiÚcolr2   r@   rA   r   r   r   r   r   ;   sf    8ÿ 
ÿ
   ÿÿ

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]   rG   ÚappendrL   rX   r   ZScaledrF   rM   rI   r^   rW   Únew_locatorr`   Úset_axes_locatorÚset_horizontalÚset_vertical)r   ÚhÚh_ax_posÚ_ÚszÚvÚv_ax_posrn   ro   r2   Úlocatorr   r   r   re   ­   s2    

 ÿzGrid._init_locatorsc                 C   s4   | j dkrt|| jƒ\}}nt|| jƒ\}}||fS )Nr<   )rO   ÚdivmodrF   rG   )r   Únro   r2   r   r   r   r^   Ê   s    
zGrid._get_col_rowc                 C   s
   t | jƒS r   )rX   r`   ©r   r   r   r   Ú__len__Ó   s    zGrid.__len__c                 C   s
   | j | S r   )r`   )r   rn   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).
        )rF   rG   r�   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©rL   Ú
fixed_sizerM   )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…   r�   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)rW   Ú
set_aspect)r   r:   r   r   r   r‰   ÷   s    zGrid.set_aspectc                 C   s
   | j  ¡ S )z(Return the aspect of the SubplotDivider.)rW   Ú
get_aspectr�   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� qznR|d
krð| j D ]}t|ddd� qÆ| j}t|ddd� n|dk�r
tjdddd� dS )aÀ  
        Define which axes have tick labels.

        Parameters
        ----------
        mode : {"L", "1", "all", "keep"}
            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.
            - "keep": Do not do anything.
        ÚallFr4   r   NrE   T)r   r   r   Ú1Zkeepz3.7zGrid label_modez©Passing an undefined label_mode is deprecated since %(since)s and will become an error %(removal)s. To silence this warning, pass "keep", which gives the same behaviour.)ÚnameÚmessage)r`   r   rb   rd   r   Zwarn_deprecated)r   Úmoder   ro   r   r   r   rg   ÿ   s0    


 þzGrid.set_label_modec                 C   s   | j S r   )rW   r�   r   r   r   Úget_divider3  s    zGrid.get_dividerc                 C   s   | j  |¡ d S r   )rW   Zset_locator)r   r~   r   r   r   ru   6  s    zGrid.set_axes_locatorc                 C   s
   | j  ¡ S r   )rW   Zget_locatorr�   r   r   r   Úget_axes_locator9  s    zGrid.get_axes_locator)Nr2   r3   )r-   r.   r/   Ú__doc__r
   rP   r   re   r^   r‚   rƒ   r„   r‡   rˆ   r‰   rŠ   rg   r�   ru   r‘   r   r   r   r   r1   .   s4   
   ûôr	4r1   c                       s<   e Zd Zddddddddddd	œ	‡ fd
d„Zdd„ Z‡  ZS )Ú	ImageGridNr2   r3   FTr4   Úrightz5%)	r5   r:   r8   Ú	cbar_modeÚcbar_locationÚcbar_padÚ	cbar_sizeÚcbar_set_caxr9   c       	            s  t jddddg|
d� t jdddd	g|d
� |
| _|| _|| _|| _tƒ j|||||||dd||	|d� | jD ]}| 	|¡ qn|�r| jdkr¨| j
D ]}| jd |_q”nr| jdkrút| j
ƒD ]:\}}|  |¡\}}| jdkrê| j| |_q¼| j| |_q¼n 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.
        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
        ÚeachÚsingleÚedgeN)r•   r   r”   r   r#   )r–   T)r=   rk   r5   r6   r7   r:   r8   r9   r   ©r   r”   )r   rN   Ú_colorbar_modeÚ_colorbar_locationÚ_colorbar_padÚ_colorbar_sizer   r   Ú	cbar_axesrf   r`   r&   Ú	enumerater^   Úzip)r   rh   ri   rj   rI   r=   rk   r5   r:   r8   r•   r–   r—   r˜   r™   r9   r   Úindexro   r2   r&   r   r   r   r   @  sL    @ÿÿ        ü




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¡ |�rªt
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¡ |�rþt
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|¡¡ �qÄtˆ 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�r¸tˆ jƒD ]}	ˆ j|	  d¡ �qžnª|dk�r$|dk�rÔˆ j	}nˆ j}t|ƒD ]}	ˆ j|	  d¡ �qât|	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                    s0   g | ](}t ˆ jƒˆ jd  jˆ j ¡ ˆ jd�‘qS )r   )r   )Ú_cbaraxes_class_factoryrP   r`   r'   rW   rZ   rŸ   )Ú.0rz   r�   r   r   Ú
<listcomp>«  s   ý
 þz,ImageGrid._init_locators.<locals>.<listcomp>r›   )r   r   r   r   rE   )rq   rr   Zny1r   )rq   Znx1rr   FTZaxes)r:   Zref_axrš   rœ   r”   r   r#   rp   )r”   r   r"   éþÿÿÿ)r”   r#   g      ð?gü©ñÒMbP?Úactive)Úwhich)r    rŸ   rL   r†   rM   r]   rI   r¢   rž   rF   r   ZAxesXrd   rs   Zfrom_anyr¡   rW   rt   rG   ZAxesYZset_visibleru   r£   rc   r`   rX   rb   r^   Zset_positionrv   rw   )r   Zcb_modeZcb_locationrx   r|   ry   Zh_cb_posr{   r~   rn   ro   r   r}   Zv_cb_posr2   ÚcountÚjr   r�   r   re   ¢  sH   



ü
 ÿ
ÿþþ

ÿþþ" ÿ
ÿþþ

ÿþþÿ

 ÿ
 ÿ
ÿÿ ÿÿÿÿ






ÿ
zImageGrid._init_locators)Nr2   r3   )r-   r.   r/   r   re   r0   r   r   r   r   r“   =  s      ûñbr“   )Únumbersr   rT   ÚnumpyrK   Z
matplotlibr   r   Zmatplotlib.gridspecr   Zaxes_dividerr   r   r	   Zmpl_axesr
   r   r   Z_make_class_factoryr¦   r1   r“   ZAxesGridr   r   r   r   Ú<module>   s        