U
    Åmœdn  ã                   @   sb   d dl Zd dlZd dlmZ 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S )é    N)ÚVersionc                 C   s0   t | tjjƒr"|dkr| S |  ¡ } tj | |¡S )z¢
    Allow MarkerStyle to accept a MarkerStyle object as parameter.

    Supports matplotlib < 3.3.0
    https://github.com/matplotlib/matplotlib/pull/16692

    N)Ú
isinstanceÚmplÚmarkersÚMarkerStyleZ
get_marker)ÚmarkerZ	fillstyle© r   úH/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/seaborn/_compat.pyr      s
    r   c                 C   sf   t |tjjƒr|S | dkrdS |dkr0d }}n|\}}G dd„ dtjjƒ}|||ƒ}|  ¡ j|_|S )zCProduce a Normalize object given a Scale and min/max domain limits.Nc                   @   s   e Zd Zddd„ZdS )z#norm_from_scale.<locals>.ScaledNormNc                 S   sâ   |   |¡\}}|  |¡ | j| jkr,tdƒ‚| j| jkrDt |d¡S |d krR| j}|rht || j| j¡}|  |¡ 	t 
|¡¡}|  | j| jg¡\}}t ||g¡ ¡ s®tdƒ‚||8 }|||  }tjj|dd�}|rÞ|d S |S )Nz"vmin must be less or equal to vmaxr   zInvalid vmin or vmaxF)Úcopy)Zprocess_valueZautoscale_NoneÚvminÚvmaxÚ
ValueErrorÚnpZ	full_likeÚclipÚ	transformZreshapeÚshapeÚisfiniteÚallÚmaZmasked_invalid)ÚselfÚvaluer   Z	is_scalarZt_valueZt_vminZt_vmaxr   r   r	   Ú__call__(   s$    
z,norm_from_scale.<locals>.ScaledNorm.__call__)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r	   Ú
ScaledNorm&   s   r   )r   r   ÚcolorsZ	NormalizeÚget_transformr   )ÚscaleZnormr   r   r   Znew_normr   r   r	   Únorm_from_scale   s    

r   c                    sØ   d}t tjƒt dƒk rrˆ d dkrrd}ˆ d ‰ | dd¡}|dk	rP||dˆ › �< | dd¡}|dk	rr||d	ˆ › �< t| tƒr”G ‡ fd
d„dƒ}|ƒ ‰ tjj| ˆ f|Ž} |rÔ|  ¡ }| 	dd¡|_
| 	d¡dkrÔd|_| S )zâ
    Backwards compatability for creation of independent scales.

    Matplotlib scales require an Axis object for instantiation on < 3.4.
    But the axis is not used, aside from extraction of the axis_name in LogScale.

    Fú3.4r   ZxyTÚbaseNÚnonpositiveÚnonposc                       s   e Zd Z” ZdS )zscale_factory.<locals>.AxisN)r   r   r   Z	axis_namer   ©Úaxisr   r	   ÚAxis[   s   r&   é
   Úmask)r   r   Ú__version__Úpopr   Ústrr   Úscale_factoryr   Úgetr!   Z_clip)r   r%   ÚkwargsZmodify_transformr!   r#   r&   r   r   r$   r	   r,   F   s*    
r,   c                 C   sœ   t tjƒt dƒk r‚|jdkr dS t| d|› d�ƒ}i }|jdkrX| ¡ }|j|jf|d< ||jf|Ž t| |› d�ƒ}| |¡ n| j	f |› d�|iŽ dS )z=Handle backwards compatability with setting matplotlib scale.r    NÚset_r   ÚfunctionZ	functionsr%   )
r   r   r)   ÚnameÚgetattrr   Z_forwardZ_inverseZ#set_default_locators_and_formattersÚset)Zaxr%   r   ÚmethodÚkwsZtransZaxis_objr   r   r	   Úset_scale_objl   s    

r6   c                 C   s2   zt j|  W S  tk
r,   t j | ¡ Y S X dS )ú7Handle changes to matplotlib colormap interface in 3.6.N)r   Ú	colormapsÚAttributeErrorÚcmZget_cmap©r1   r   r   r	   Úget_colormap‚   s    r<   c                 C   sF   z| t jkrt jj|| d� W n" tk
r@   t j | |¡ Y nX dS )r7   r;   N)r   r8   Úregisterr9   r:   Zregister_cmap)r1   Zcmapr   r   r	   Úregister_colormapŠ   s
    
r>   c                 C   s@   t | dƒr|  |¡ n&|dkr*|  d¡ n|dkr<|  d¡ dS )z5Handle changes to auto layout engine interface in 3.6Úset_layout_engineZtightTZconstrainedN)Úhasattrr?   Zset_tight_layoutZset_constrained_layout)ZfigZenginer   r   r	   r?   “   s    
r?   c                 C   sL   t tjƒt dƒk r4t| d|› d�ƒƒ }| || ¡ nt|d|› �ƒ| ƒ dS )z(Handle changes to post-hoc axis sharing.z3.5.0Zget_shared_Z_axesÚshareN)r   r   r)   r2   Újoin)Zax0Zax1ÚwhichÚgroupr   r   r	   Ú
share_axisž   s    rE   )NN)Únumpyr   Z
matplotlibr   Zseaborn.external.versionr   r   r   r,   r6   r<   r>   r?   rE   r   r   r   r	   Ú<module>   s   
0&	