
    G8c!                     4   d Z ddlmZ ddlmZ ddlmZ  G d d      Z G d de      Z ej                  d	d
       G d de             Z
 G d de      Z G d de      ZeZd Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z ej                  d	d       G d  d!e             Zd*d#Z ej                  d	       G d$ d%e             Z ej                  d	       G d& d'             Z G d( d)e      Zy")+a  
Provides classes of simple units that will be used with AxesDivider
class (or others) to determine the size of each Axes. The unit
classes define `get_size` method that returns a tuple of two floats,
meaning relative and absolute sizes, respectively.

Note that this class is nothing more than a simple tuple of two
floats. Take a look at the Divider class to see how these two
values are used.
    )Number)_api)Axesc                       e Zd Zd Zd Zy)_Basec                     t        ||       S N)Fractionselfothers     C/usr/lib/python3/dist-packages/mpl_toolkits/axes_grid1/axes_size.py__rmul__z_Base.__rmul__   s    t$$    c                 d    t        |t              rt        | |      S t        | t        |            S r	   )
isinstancer   AddFixedr   s     r   __add__z_Base.__add__   s*    eU#tU##tU5\**r   N)__name__
__module____qualname__r   r    r   r   r   r      s    %+r   r   c                       e Zd Zd Zd Zy)r   c                      || _         || _        y r	   )_a_b)r   abs      r   __init__zAdd.__init__   s    r   c                     | j                   j                  |      \  }}| j                  j                  |      \  }}||z   ||z   fS r	   )r   get_sizer   )r   renderer
a_rel_size
a_abs_size
b_rel_size
b_abs_sizes         r   r"   zAdd.get_size"   sI    !%!1!1(!;
J!%!1!1(!;
JJ&
Z(???r   Nr   r   r   r    r"   r   r   r   r   r      s    @r   r   z3.6zsum(sizes, start=Fixed(0)))alternativec                       e Zd Zd Zd Zy)AddListc                     || _         y r	   )_list)r   add_lists     r   r    zAddList.__init__+   s	    
r   c                     t        | j                  D cg c]  }|j                  |      d    c}      }t        | j                  D cg c]  }|j                  |      d    c}      }||fS c c}w c c}w )Nr      )sumr-   r"   )r   r#   r   sum_rel_sizesum_abs_sizes        r   r"   zAddList.get_size.   sd    TZZHAJJx03HITZZHAJJx03HI\)) IHs   A/	A4Nr(   r   r   r   r+   r+   (   s    *r   r+   c                       e Zd ZdZd Zd Zy)r   zT
    Simple fixed size with absolute part = *fixed_size* and relative part = 0.
    c                 H    t        j                  t        |       || _        y )N
fixed_size)r   check_isinstancer   r7   )r   r7   s     r   r    zFixed.__init__9   s    f<$r   c                 &    d}| j                   }||fS N        r6   r   r#   rel_sizeabs_sizes       r   r"   zFixed.get_size=   s    ??!!r   Nr   r   r   __doc__r    r"   r   r   r   r   r   4   s    %"r   r   c                       e Zd ZdZd Zd Zy)Scaledz_
    Simple scaled(?) size with absolute part = 0 and
    relative part = *scalable_size*.
    c                     || _         y r	   _scalable_size)r   scalable_sizes     r   r    zScaled.__init__I   s
    +r   c                 &    | j                   }d}||fS r:   rD   r<   s       r   r"   zScaled.get_sizeL   s    &&!!r   Nr?   r   r   r   rB   rB   C   s    
,"r   rB   c                 4    | j                         }|dk(  rd}|S )Nauto      ?)
get_aspect)axaspects     r   _get_axes_aspectrN   T   s    ]]_FMr   c                       e Zd ZdZddZd Zy)AxesXzu
    Scaled size whose relative part corresponds to the data width
    of the *axes* multiplied by the *aspect*.
    Nc                 R    || _         || _        |dk(  r|t        d      || _        y Naxesz%ref_ax must be set when aspect='axes'_axes_aspect
ValueError_ref_axr   rS   rM   ref_axs       r   r    zAxesX.__init__a   /    
VDEEr   c                     | j                   j                         \  }}| j                  dk(  r.t        | j                        }|t        | j                         z  }n| j                  }t        ||z
        |z  }d}||fS NrS   r;   )rU   get_xlimrV   rN   rX   absr   r#   l1l2
ref_aspectrM   r=   r>   s           r   r"   zAxesX.get_sizeh   sq    $$&B<<6!)$,,7J"24::">>F\\Fr"u:f$!!r   rJ   Nr?   r   r   r   rP   rP   [   s    

"r   rP   c                       e Zd ZdZddZd Zy)AxesYzv
    Scaled size whose relative part corresponds to the data height
    of the *axes* multiplied by the *aspect*.
    Nc                 R    || _         || _        |dk(  r|t        d      || _        y rR   rT   rY   s       r   r    zAxesY.__init__{   r[   r   c                     | j                   j                         \  }}| j                  dk(  r+t        | j                        }t        | j                         }n| j                  }t        ||z
        |z  }d}||fS r]   )rU   get_ylimrV   rN   rX   r_   r`   s           r   r"   zAxesY.get_size   sk    $$&B<<6!)$,,7J%djj1F\\Fr"u:f$!!r   rd   r?   r   r   r   rf   rf   u   s    
"r   rf   c                   "    e Zd ZdZd Zd Zd Zy)	MaxExtentzt
    Size whose absolute part is either the largest width or the largest height
    of the given *artist_list*.
    c                 R    || _         t        j                  ddg|       || _        y )Nwidthheight)w_or_h)_artist_listr   check_in_list_w_or_h)r   artist_listro   s      r   r    zMaxExtent.__init__   s&    'GX.v>r   c                 :    | j                   j                  |       y r	   )rp   append)r   r   s     r   
add_artistzMaxExtent.add_artist   s      #r   c                     d}| j                   D cg c]>  }t        |j                  |      | j                        |j                  j
                  z  @ }}t        |d      }||fS c c}w )Nr;   r   )default)rp   getattrget_window_extentrr   figuredpimax)r   r#   r=   r   extent_listr>   s         r   r"   zMaxExtent.get_size   sm     &&( A''14<<@188<<O( ( {A.!!	(s   AA'N)r   r   r   r@   r    rv   r"   r   r   r   rk   rk      s    

$"r   rk   c                   "     e Zd ZdZ fdZ xZS )MaxWidthzS
    Size whose absolute part is the largest width of the given *artist_list*.
    c                 &    t         |   |d       y )Nrm   superr    r   rs   	__class__s     r   r    zMaxWidth.__init__   s    g.r   r   r   r   r@   r    __classcell__r   s   @r   r   r      s    / /r   r   c                   "     e Zd ZdZ fdZ xZS )	MaxHeightzT
    Size whose absolute part is the largest height of the given *artist_list*.
    c                 &    t         |   |d       y )Nrn   r   r   s     r   r    zMaxHeight.__init__   s    h/r   r   r   s   @r   r   r      s    0 0r   r   c                       e Zd ZdZd Zd Zy)r
   zi
    An instance whose size is a *fraction* of the *ref_size*.

    >>> s = Fraction(0.3, AxesX(ax))
    c                 V    t        j                  t        |       || _        || _        y )N)fraction)r   r8   r   _fraction_ref	_fraction)r   r   ref_sizes      r   r    zFraction.__init__   s!    fx8%!r   c                     | j                   | j                  dfS | j                   j                  |      \  }}|| j                  z  }|| j                  z  }||fS r:   )r   r   r"   r   r#   rr   r=   r>   s         r   r"   zFraction.get_size   s^    %>>2%%%%..x8DAq'H'HX%%r   Nr?   r   r   r   r
   r
      s    "
&r   r
   z
size + padc                       e Zd ZdZd Zd Zy)Paddedzf
    Return an instance where the absolute part of *size* is
    increase by the amount of *pad*.
    c                      || _         || _        y r	   )_size_pad)r   sizepads      r   r    zPadded.__init__   s    
	r   c                 h    | j                   j                  |      \  }}|}|| j                  z   }||fS r	   )r   r"   r   r   s         r   r"   zPadded.get_size   s7    zz""8,1tyy=!!r   Nr?   r   r   r   r   r      s    
"r   r   Nc                     t        | t              rt        |       S t        | t              r#| d   dk(  rt	        t        | dd       dz  |      S t        d      )a8  
    Create a Fixed unit when the first argument is a float, or a
    Fraction unit if that is a string that ends with %. The second
    argument is only meaningful when Fraction unit is created.

    >>> a = Size.from_any(1.2) # => Size.Fixed(1.2)
    >>> Size.from_any("50%", a) # => Size.Fraction(0.5, a)
    %Nd   zUnknown format)r   r   r   strr
   floatrW   )r   fraction_refs     r   from_anyr      sV     $T{	D#	8s?E$s),s2LAA
%
&&r   c                       e Zd Zd Zd Zy)SizeFromFuncc                     || _         y r	   )_func)r   funcs     r   r    zSizeFromFunc.__init__   s	    
r   c                 \    d}| j                  |      }|j                  d      }||z  }||fS )Nr;   g      R@)r   points_to_pixels)r   r#   r=   bbr|   r>   s         r   r"   zSizeFromFunc.get_size   s9    ZZ!'',c6!!r   Nr(   r   r   r   r   r      s    "r   r   c                   .    e Zd Zd d d d dZd Zd Zy)	GetExtentHelperc                 4    |j                   | j                   z
  S r	   xminr   	axes_bboxs     r   <lambda>zGetExtentHelper.<lambda>      )..499*D r   c                 4    | j                   |j                   z
  S r	   xmaxr   s     r   r   zGetExtentHelper.<lambda>      $))inn*D r   c                 4    |j                   | j                   z
  S r	   yminr   s     r   r   zGetExtentHelper.<lambda>  r   r   c                 4    | j                   |j                   z
  S r	   ymaxr   s     r   r   zGetExtentHelper.<lambda>  r   r   leftrightbottomtopc                     t        j                  | j                  |       t        |t              r|gn|| _        || _        y N)	direction)r   rq   _get_func_mapr   r   _ax_list
_directionr   rL   r   s      r   r    zGetExtentHelper.__init__
  s3    4--C *2t 4"#r   c           	          | j                   | j                     }| j                  D cg c]&  } ||j                  |d      |j                        ( }}t        |      S c c}w )NFcall_axes_locator)r   r   r   get_tightbboxbboxr}   )r   r#   get_funcrL   vls        r   __call__zGetExtentHelper.__call__  sg    %%doo6 ' r''E'Jww  ' ' 2w's   +A N)r   r   r   r   r    r   r   r   r   r   r     s"     EDDD	M$
r   r   c                   2    e Zd ZdZd d d d dZd Zd Zy	)
_AxesDecorationsSizezT
    Fixed size, corresponding to the size of decorations on a given Axes side.
    c                 4    |j                   | j                   z
  S r	   r   tight_bbaxes_bbs     r   r   z_AxesDecorationsSize.<lambda>      GLL8==,H r   c                 4    | j                   |j                   z
  S r	   r   r   s     r   r   z_AxesDecorationsSize.<lambda>      HMMGLL,H r   c                 4    |j                   | j                   z
  S r	   r   r   s     r   r   z_AxesDecorationsSize.<lambda>  r   r   c                 4    | j                   |j                   z
  S r	   r   r   s     r   r   z_AxesDecorationsSize.<lambda>   r   r   r   c                     t        j                  | j                  |      | _        t	        |t
              r	|g| _        y || _        y r   )r   check_getitem_get_size_map	_get_sizer   r   r   r   s      r   r    z_AxesDecorationsSize.__init__#  s7    ++)5 *2t 4"r   c                     t        | j                  D cg c]/  }| j                  |j                  |d      |j                        1 c}      }|j                  d      }||z  }d}||fS c c}w )NFr   H   r   )r}   r   r   r   r   r   )r   r#   rL   szr|   r>   r=   s          r   r"   z_AxesDecorationsSize.get_size(  s|     mm%  NN2++H+N77$% & ''+8!!%s   4A+N)r   r   r   r@   r   r    r"   r   r   r   r   r     s'    
 IHHH	M=
"r   r   r	   )r@   numbersr   
matplotlibr   matplotlib.axesr   r   r   
deprecatedr+   r   rB   ScalablerN   rP   rf   rk   r   r   r
   r   r   r   r   r   r   r   r   <module>r      sH  	    + +@% @ 	35*e *5*"E ""U " "E "4"E "6" "./y /0	 0&u &, L1"U " 2""'" "5 " "   *"5 "r   