U
    FvfGt  ã                   @   sÞ  d dl Z d dlZd dlmZmZmZmZ d dlZd dl	m
Z
 d dlm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lmZmZ dd„ Zd	d
„ Zedg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$G dd„ dej%ƒZ&G d d!„ d!ƒZ'G d"d#„ d#ƒZ(d$d%„ Z)d&d'„ Z*d(d)„ Z+d*d+„ Z,d,d-„ Z-d.d/„ Z.d0d1„ Z/d2d3„ Z0d4d5„ Z1d6d7„ Z2d8d9„ Z3d:d;„ Z4d<d=„ Z5ej6 7d>d?d@dAdBg¡dCdD„ ƒZ8dEdF„ Z9dGdH„ Z:dIdJ„ Z;edKgdLdMdN„ ƒZ<dOdP„ Z=dQdR„ Z>dS )Sé    N)Úassert_allcloseÚassert_almost_equalÚassert_array_equalÚassert_array_almost_equal)Úscale)ÚAffine2DÚBboxÚTransformedBbox)ÚPath)Úimage_comparisonÚcheck_figures_equalc                  C   s^   G dd„ dt jƒ} | ƒ }t ¡ }tjt d¡||j d t ¡  d|_	|j
 ¡  t ¡  d S )Nc                       sD   e Zd ZdZd ZZdZ‡ fdd„Zdd„ ZeZ	dd	„ Z
e
Z‡  ZS )
z<test_non_affine_caching.<locals>.AssertingNonAffineTransformz
        This transform raises an assertion error when called when it
        shouldn't be and ``self.raise_on_transform`` is True.

        é   Fc                    s*   t ƒ j||Ž d| _t ¡  dd¡| _d S )NFé
   )ÚsuperÚ__init__Úraise_on_transformÚmtransformsr   r   Úunderlying_transform)ÚselfÚargsÚkwargs©Ú	__class__© úD/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/tests/test_transforms.pyr      s    zEtest_non_affine_caching.<locals>.AssertingNonAffineTransform.__init__c                 S   s   | j rtdƒ‚| j |¡S ©Nz3Invalidated affine part of transform unnecessarily.)r   ÚAssertionErrorr   Útransform_path©r   Úpathr   r   r   Útransform_path_non_affine    s    ÿzVtest_non_affine_caching.<locals>.AssertingNonAffineTransform.transform_path_non_affinec                 S   s   | j rtdƒ‚| j |¡S r   )r   r   r   Ú	transformr   r   r   r   Útransform_non_affine&   s    ÿzQtest_non_affine_caching.<locals>.AssertingNonAffineTransform.transform_non_affine)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
input_dimsÚoutput_dimsÚ	is_affiner   r    r   r"   r!   Ú__classcell__r   r   r   r   ÚAssertingNonAffineTransform   s   r+   r   ©r!   T)r   Ú	TransformÚpltÚaxesÚplotÚnpÚarangeÚ	transDataÚdrawr   Ú	transAxesZ
invalidate)r+   Zmy_transÚaxr   r   r   Útest_non_affine_caching   s    
r7   c                  C   sn   G dd„ dƒ} t  ¡ }t jt d¡| dƒd\}| dd¡ | dd¡ t| ¡ j	 
¡ t ¡  d¡ 
¡ ƒ d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z-test_external_transform_api.<locals>.ScaledByc                 S   s
   || _ d S ©N)Ú_scale_factor)r   Zscale_factorr   r   r   r   9   s    z6test_external_transform_api.<locals>.ScaledBy.__init__c                 S   s   t  ¡  | j¡|j S r8   )r   r   r   r9   r3   )r   r/   r   r   r   Ú_as_mpl_transform<   s    ÿz?test_external_transform_api.<locals>.ScaledBy._as_mpl_transformN)r#   r$   r%   r   r:   r   r   r   r   ÚScaledBy8   s   r;   r   r,   r   éd   )r.   r/   r0   r1   r2   Zset_xlimZset_ylimr   Zget_transformZ_aÚ
get_matrixr   r   r   )r;   r6   Úliner   r   r   Útest_external_transform_api7   s    ÿr?   Zpre_transform_dataTZmpl20gš™™™™™©?)Zremove_textÚstyleZtolc               
   C   s¼  t  ¡ } t ¡  d¡}| jt d¡ dd¡|| j	 d | j
t ddd¡t d	dd
¡t d¡ dd¡|| j	 d | jt dd¡t dd¡|| j	 d t ddd¡}t ddd¡}dt |¡ t |d d …tjf ¡ }t |¡t |d d …tjf ¡ }| j|||||| j	 t ||¡d |d d d… |d d d…  }}|d d d…d d d…f |d d d…d d d…f  }}| j||d |||| j	 d | j|d |d |d |d || j	 d d S )Nr   é0   é   é   r,   r   é   é   g      @é	   é   é   é   r   )r!   Z	linewidthé   )r.   r/   r   r   r   Úcontourfr1   r2   Zreshaper3   Ú
pcolormeshÚlinspaceZscatterÚsinÚcosZnewaxisZ
streamplotÚhypotZquiverZbarbs)r6   Ztimes10ÚxÚyÚuÚvr   r   r   Útest_pre_transform_plottingI   s,    "ýÿ&"
ÿ2rU   c                  C   s‚   t  ¡ } t t ddd¡t ddd¡¡\}}| j||t || ¡t ¡  	d¡| j
 d t ddgd	d
gg¡}t|| j ¡ ƒ d S )Né   rG   çÍÌÌÌÌÌ(@ç      )@çš™™™™™¹?r,   ç      ø?ç×£p=
×ó?ç       @ç      ô?)r.   r/   r1   ÚmeshgridrM   rK   Úlogr   r   r   r3   Úarrayr   ÚdataLimÚ
get_points©r6   ÚxsZysÚexpectedr   r   r   Ú!test_contour_pre_transform_limitsn   s    $ÿ
ÿrf   c                  C   s’   t  ¡ } t t ddd¡t ddd¡¡\}}| j||t || ¡d d…d d…f t ¡  	d¡| j
 d t dd	gd
dgg¡}t|| j ¡ ƒ d S ©NrV   rG   rW   rX   éÿÿÿÿrY   r,   rZ   r[   r\   r]   )r.   r/   r1   r^   rM   Zpcolorr_   r   r   r   r3   r`   r   ra   rb   rc   r   r   r   Ú test_pcolor_pre_transform_limitsy   s    $$ÿ
ÿri   c                  C   s’   t  ¡ } t t ddd¡t ddd¡¡\}}| j||t || ¡d d…d d…f t ¡  	d¡| j
 d t dd	gd
dgg¡}t|| j ¡ ƒ d S rg   )r.   r/   r1   r^   rM   rL   r_   r   r   r   r3   r`   r   ra   rb   rc   r   r   r   Ú$test_pcolormesh_pre_transform_limits…   s    $$ÿ
ÿrj   c                  C   sÄ  t  ddgddgddgg¡} tj dddddd¡}| | ¡}t  ddgddgddgg¡}t||ƒ tj dddddd¡}| | ¡}t  ddgddgddgg¡}t||ƒ tj dddddd¡}| | ¡}t  ddgd	dgddgg¡}t||ƒ tj dddd
dd¡}| | ¡}t  ddgddgddgg¡}t||ƒ tj dddddd¡}| | ¡}t  ddgddgddgg¡}t||ƒ tj dddddd¡}| | ¡}t  ddgddgddgg¡}t||ƒ d S )Nr   r   rG   rh   rH   r   éþÿÿÿrJ   é<   rD   éP   rI   rB   )r1   r`   r   r   Zfrom_valuesr!   r   )ÚpointsÚtÚactualre   r   r   r   Útest_Affine2D_from_values‘   s8    
þ










rq   c                  C   sX   ddg} t  ¡ }t| | | ¡  | ¡¡ƒ | dd¡ ¡  t| | | ¡  | ¡¡ƒ d S )Nç      ð?)r   r   r   r!   ÚinvertedÚ	translater=   )Zpointro   r   r   r   Ú test_affine_inverted_invalidated¶   s
    ru   c                  C   sl   t  ddddg¡} t t ¡ t dd¡¡}| | ¡}|j| 	¡ ddd	}t
|Ž \}}t|| jd d
… ƒ d S )N)çš™™™™™É?éÿÿÿ)çš™™™™™Ù?rw   )rx   rG   )rv   rG   r   Úclip)r   r   r<   r<   F)ry   Zsimplifyrh   )r
   Z_create_closedr   ZBlendedGenericTransformr   r   ÚLogTransformr    Ziter_segmentsÚ
get_affineÚzipr   Úcodes)r   ÚtransZtpathÚresultZtpointsZtcodesr   r   r   Útest_clipping_of_logÁ   s     
ÿ

þr€   c                       s<   e Zd ZdZdZdZdZ‡ fdd„Zdd„ Zdd	„ Z	‡  Z
S )
ÚNonAffineForTestzÚ
    A class which looks like a non affine transform, but does whatever
    the given transform does (even if it is affine). This is very useful
    for testing NonAffine behaviour with a simple Affine transform.

    Fr   c                    s   || _ tƒ j||Ž d S r8   )Ú
real_transr   r   )r   r‚   r   r   r   r   r   r   Ú   s    zNonAffineForTest.__init__c                 C   s   | j  |¡S r8   )r‚   r!   )r   Úvaluesr   r   r   r"   Þ   s    z%NonAffineForTest.transform_non_affinec                 C   s   | j  |¡S r8   )r‚   r   r   r   r   r   r    á   s    z*NonAffineForTest.transform_path_non_affine)r#   r$   r%   r&   r)   r(   r'   r   r"   r    r*   r   r   r   r   r   Ï   s   r   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestBasicTransformc                 C   sà   t jdd tjd ¡| _t jdd dd¡| _t jdd dd¡| _	t
t  ¡  dd¡d	d| _t
t  ¡  dd¡d
d| _t
t  ¡  dd¡dd| _| j| j| j  | j	 | _| j| j | j | j	 | _| j| j | j	 | _d S )NÚta1)Zshorthand_namer   Úta2r   r   Úta3rH   Útn1Útn2Útn3)r   r   Úrotater1   Úpir…   rt   r†   r   r‡   r   rˆ   r‰   rŠ   Ústack1Ústack2Ústack2_subset©r   r   r   r   Úsetup_methodæ   s    ÿÿÿzTestBasicTransform.setup_methodc                 C   s4   | j jdkst‚| jjdks t‚| jjdks0t‚d S )NrD   rJ   )r   Údepthr   rŽ   r   r   r   r   r   Útest_transform_depthÿ   s    z'TestBasicTransform.test_transform_depthc                 C   s¢   | j | j| j| j   | j }|| j| j| j  | j | j| j | j | j| j | jg}dd„ | ¡ D ƒ}t|ƒt|ƒks~t‚t||ƒD ]\}}||ksˆt‚qˆd S )Nc                 S   s   g | ]\}}|‘qS r   r   )Ú.0Ú_Zrhr   r   r   Ú
<listcomp>  s     zCTestBasicTransform.test_left_to_right_iteration.<locals>.<listcomp>)	r…   rˆ   r†   r‰   r‡   Z_iter_break_from_left_to_rightÚlenr   r|   )r   Zstack3Ztarget_transformsÚrZtarget_stackÚstackr   r   r   Útest_left_to_right_iteration  s    
üz/TestBasicTransform.test_left_to_right_iterationc              	   C   s>  | j | j | jkst‚| j| j | jks,t‚| j| j | j ¡ ksFt‚| j| j jdks\t‚t t	¡ | j | j  W 5 Q R X | j| j
| j  }| j
| j }|| | jks®t‚|| j
 || j
 ¡  ksÊt‚| j | j | j| j| j
  ksìt‚| j| j | j| j | j
 kst‚| j
| j | j | j | j
| j ks:t‚d S )NrH   )r   r   r…   r   rŽ   rs   r’   ÚpytestÚraisesÚ
ValueErrorr†   r‡   rˆ   )r   Zaff1Zaff2r   r   r   Útest_transform_shortcuts  s    "$
ÿz+TestBasicTransform.test_transform_shortcutsc                 C   s@  | j | j }| j | j }||ks$t‚|| jks2t‚| |¡s@t‚| | j¡sPt‚| | j ¡r`t‚| | j | j  ¡rvt‚||ks‚t‚| j | j¡s”t‚| j | j¡s¦t‚| j | j¡s¸t‚| j | j¡sÊt‚| j | j¡rÜt‚| j | j¡rît‚| j | j | j ¡st‚| j | j | j ¡s"t‚| j | j| j  ¡r<t‚d S r8   )	r†   r…   r   Zcontains_branchr   r‡   rŽ   r   rˆ   )r   Úr1Úr2r   r   r   Útest_contains_branch*  s$    z'TestBasicTransform.test_contains_branchc                 C   s  t jddgddgt jdgddggt jd}| j |¡}| j |¡}t jddgd	d
gt jt jgddggt jd}t jddgddgt jt jgddggt jd}t||ƒ t||ƒ t| j |¡|ƒ t| j 	¡  |¡|ƒ | j
| j  ¡ }| j 	¡  ¡ }t||ƒ | j 	¡  ¡ }t||ƒ d S )Nr   r   rG   rH   rh   )Zdtyperr   r\   g      3Àç      (@g      &@g      @g      "Àg      8@)r1   r`   ÚnanZfloat64r   r"   r!   r   Útransform_affiner{   r†   r‡   r=   r   rŽ   )r   rn   Zna_ptsZall_ptsZna_expectedZall_expectedZexpected_resultr   r   r   r   Útest_affine_simplificationD  s<     ÿ
 ÿÿ
 ÿþ

ÿÿ
z-TestBasicTransform.test_affine_simplificationN)	r#   r$   r%   r‘   r“   rš   rž   r¡   r¥   r   r   r   r   r„   å   s   r„   c                   @   s\   e Z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 )ÚTestTransformPlotInterfacec                 C   sX   t  ¡ }|jdddgdddg|jd t|j ¡ t tj	tj	gtj	 tj	 gg¡ƒ d S ©NrY   ç333333ó?çš™™™™™é?çÍÌÌÌÌÌì?ç      à?r,   )
r.   r/   r0   r5   r   ra   rb   r1   r`   Úinf©r   r6   r   r   r   Útest_line_extent_axes_coordsk  s    
ÿÿz7TestTransformPlotInterface.test_line_extent_axes_coordsc                 C   sL   t  ¡ }|jdddgdddg|jd t|j ¡ t ddgddgg¡ƒ d S r§   )	r.   r/   r0   r3   r   ra   rb   r1   r`   r­   r   r   r   Útest_line_extent_data_coordss  s
    
ÿz7TestTransformPlotInterface.test_line_extent_data_coordsc                 C   s`   t  ¡ }t |j|j¡}|jdddgdddg|d t|j 	¡ t
 t
jdgt
j d	gg¡ƒ d S )
NrY   r¨   r©   é#   éûÿÿÿé   r,   g      Àg     €A@)r.   r/   r   Úblended_transform_factoryr5   r3   r0   r   ra   rb   r1   r`   r¬   ©r   r6   r~   r   r   r   Ú!test_line_extent_compound_coords1z  s    ÿ

ÿÿz<TestTransformPlotInterface.test_line_extent_compound_coords1c                 C   s^   t  ¡ }t ¡  d¡|j }|jdddgdddg|d t|j 	¡ t
 d	d
gddgg¡ƒ d S )Nr   rY   r¨   r©   r°   r±   r²   r,   rr   ç      IÀr¢   ç     àu@)r.   r/   r   r   r   r3   r0   r   ra   rb   r1   r`   r´   r   r   r   Ú)test_line_extent_predata_transform_coords…  s    
ÿzDTestTransformPlotInterface.test_line_extent_predata_transform_coordsc                 C   sn   t  ¡ }t |jt ¡  d¡|j ¡}|jdddgdddg|d t	|j
 ¡ t tjd	gtj d
gg¡ƒ d S )Nr   rY   r¨   r©   r°   r±   r²   r,   r¶   r·   )r.   r/   r   r³   r5   r   r   r3   r0   r   ra   rb   r1   r`   r¬   r´   r   r   r   Ú!test_line_extent_compound_coords2  s     ÿ
ÿz<TestTransformPlotInterface.test_line_extent_compound_coords2c                 C   s`   t  ¡ }t ¡  dd¡}t jt d¡||j d t 	ddgddgg¡d }t
|j ¡ |ƒ d S )Nr   r,   ç        ç      "@©r.   r/   r   r   rt   r0   r1   r2   r3   r`   r   ra   rb   ©r   r6   ÚoffsetÚexpected_data_limr   r   r   Útest_line_extents_affine—  s
    z3TestTransformPlotInterface.test_line_extents_affinec                 C   sx   t  ¡ }t ¡  dd¡}tt ¡  dd¡ƒ}t jt d¡|| |j	 d t 
ddgddgg¡d }t|j ¡ |ƒ d S )Nr   r,   rº   r»   rG   )r.   r/   r   r   rt   r   r0   r1   r2   r3   r`   r   ra   rb   )r   r6   r¾   Ú	na_offsetr¿   r   r   r   Útest_line_extents_non_affinež  s    z7TestTransformPlotInterface.test_line_extents_non_affinec                 C   sœ   t  ¡ }t ¡  dd¡}tt ¡  dd¡ƒ}tddgddgddgddggƒ}tj||| |j	 d}| 
|¡ t ddgddgg¡d }t|j ¡ |ƒ d S )Nr   r   r,   rº   ç      $@rG   )r.   r/   r   r   rt   r   r
   ÚmpatchesÚ	PathPatchr3   Ú	add_patchr1   r`   r   ra   rb   )r   r6   r¾   rÁ   ÚpthÚpatchr¿   r   r   r   Útest_pathc_extents_non_affine¦  s     ÿ
z8TestTransformPlotInterface.test_pathc_extents_non_affinec                 C   s„   t  ¡ }t ¡  dd¡}tddgddgddgddggƒ}tj|||j d}| 	|¡ t
 ddgddgg¡d }t|j ¡ |ƒ d S )Nr   r   r,   rº   rÃ   )r.   r/   r   r   rt   r
   rÄ   rÅ   r3   rÆ   r1   r`   r   ra   rb   )r   r6   r¾   rÇ   rÈ   r¿   r   r   r   Útest_pathc_extents_affine±  s     
z4TestTransformPlotInterface.test_pathc_extents_affinec                 C   sh   t jdd}t ¡  dd¡}t jt d¡||j d t 	ddgddgg¡ddg }t
|j ¡ |ƒ d S )NÚpolar©Z
projectionr   r   r,   rº   r»   r¼   r½   r   r   r   Ú*test_line_extents_for_non_affine_transDataº  s
    zETestTransformPlotInterface.test_line_extents_for_non_affine_transDataN)r#   r$   r%   r®   r¯   rµ   r¸   r¹   rÀ   rÂ   rÉ   rÊ   rÍ   r   r   r   r   r¦   j  s   
	r¦   c                 C   s   t | j|jƒ d S r8   )r   Zbounds)Zbbox1Zbbox2r   r   r   Úassert_bbox_eqÇ  s    rÎ   c                  C   s0   t jjdddddd} |  ¡ }t|j| jƒ d S )Nrº   rr   )Úminpos)r   r   Úfrom_extentsÚfrozenr   rÏ   )ZbboxrÑ   r   r   r   Útest_bbox_frozen_copies_minposË  s    rÒ   c                  C   sÀ   t jj} t jj}| ddddƒ}| ddddƒ}| ddddƒ}| ddddƒ}| ddddƒ}t|||ƒ|ƒ t|||ƒ| ddddƒƒ t|||ƒ|ƒ |||ƒd ks¢t‚t|||ƒ| ddddƒƒ d S )Nr   rH   r«   rZ   ç      è?g      @r   )r   r   rÐ   ÚintersectionrÎ   r   )Zbbox_from_extZinterrŸ   r    Zr3Zr4Zr5r   r   r   Útest_bbox_intersectionÑ  s    rÕ   c                  C   s°   t  ddgddgg¡} t| tt| ƒdt jiƒƒ tt| ƒdtiƒ}| ¡ D ]\}}t| |ƒ|ksJt	‚qJd}tt
| |ƒdtiƒ}| ¡ D ]$\}}tt
t| |ƒ|ƒƒ|ks†t	‚q†d S )Nr«   r   rÓ   r   z.1f)r   r   rÎ   ÚevalÚreprÚstrÚdictÚitemsÚgetattrr   Úformat)ÚbZasdictÚkrT   Úfmtr   r   r   Útest_bbox_as_stringsç  s    rà   c                   C   s   t tjddjƒdkst‚d S )NrË   rÌ   aØ  CompositeGenericTransform(
    CompositeGenericTransform(
        CompositeGenericTransform(
            TransformWrapper(
                BlendedAffine2D(
                    IdentityTransform(),
                    IdentityTransform())),
            CompositeAffine2D(
                Affine2D().scale(1.0),
                Affine2D().scale(1.0))),
        PolarTransform(
            PolarAxes(0.125,0.1;0.775x0.8),
            use_rmin=True,
            _apply_theta_transforms=False)),
    CompositeGenericTransform(
        CompositeGenericTransform(
            PolarAffine(
                TransformWrapper(
                    BlendedAffine2D(
                        IdentityTransform(),
                        IdentityTransform())),
                LockableBbox(
                    Bbox(x0=0.0, y0=0.0, x1=6.283185307179586, y1=1.0),
                    [[-- --]
                     [-- --]])),
            BboxTransformFrom(
                _WedgeBbox(
                    (0.5, 0.5),
                    TransformedBbox(
                        Bbox(x0=0.0, y0=0.0, x1=6.283185307179586, y1=1.0),
                        CompositeAffine2D(
                            Affine2D().scale(1.0),
                            Affine2D().scale(1.0))),
                    LockableBbox(
                        Bbox(x0=0.0, y0=0.0, x1=6.283185307179586, y1=1.0),
                        [[-- --]
                         [-- --]])))),
        BboxTransformTo(
            TransformedBbox(
                Bbox(x0=0.125, y0=0.09999999999999998, x1=0.9, y1=0.9),
                BboxTransformTo(
                    TransformedBbox(
                        Bbox(x0=0.0, y0=0.0, x1=8.0, y1=6.0),
                        Affine2D().scale(80.0))))))))rØ   r.   Zsubplotr3   r   r   r   r   r   Útest_str_transformó  s    rá   c                  C   s$   t  ¡ } |  d¡}|jdks t‚d S )N©rH   rH   )r   )r   r   r¤   Úshaper   )ro   r˜   r   r   r   Útest_transform_single_point%  s    
rä   c                  C   s&   t  ¡ \} }| d¡ |j d¡ d S )Nr_   râ   )r.   ÚsubplotsÚ
set_yscaler3   r!   )Úfigr6   r   r   r   Útest_log_transform+  s    
rè   c                  C   s@   t  ddgddgg¡} t  ddgdtjgg¡}|  |¡r<t‚d S )Nr   rH   )r   r   r1   r£   Úoverlapsr   )ÚarÝ   r   r   r   Útest_nan_overlap3  s    rë   c               	   C   s²   t  ¡ } t dddg¡}t ddgddgddgg¡}|  ||¡}t||ƒ t t¡" |  ||dd…dd…f ¡ W 5 Q R X t t¡" |  ||dd…d d …f ¡ W 5 Q R X d S )NrG   é-   rl   r   rH   r   )	r   r   r1   r`   Ztransform_anglesr   r›   rœ   r   )ro   Zanglesrn   Z
new_anglesr   r   r   Útest_transform_angles9  s    
&rí   c                  C   sF   t  ddg¡} dt jfddg}|D ]}t  tj|Ž ¡}t|| ƒ q"d S )Ngü©ñÒMbP¿gü©ñÒMbP?r   ©r   r   )r   güó     )r1   r`   r£   r   Znonsingularr   )Zzero_expansionZcasesr   Úoutr   r   r   Útest_nonsingularK  s
    rð   c               	   C   sà   t  ¡ } t t¡ |  d¡ W 5 Q R X t t¡ |  dggg¡ W 5 Q R X t t¡ |  g ¡ W 5 Q R X t t¡ |  dg¡ W 5 Q R X t t¡ |  dgg¡ W 5 Q R X t t¡ |  dddgg¡ W 5 Q R X d S )NrH   r   rJ   )r   r   r›   rœ   r   r!   ÚRuntimeError©ro   r   r   r   Útest_invalid_argumentsT  s    ró   c                  C   sÆ   ddddg} t | dd}t ¡ }t ||¡}t| ¡ j| ƒ dt d¡ }| 	tj
d	 ¡ t| ¡ jd||fd
d| f| |fgdd dgd	 |_t| ¡ jd||fd
d| f| |fgdd d S )Nrî   )rH   r   râ   )r   rH   T)ÚclosedrH   r   rD   r   gVçž¯Ò<)Zatol)r
   r   r   ZTransformedPathr   Úget_fully_transformed_pathÚverticesr1   Úsqrtr‹   rŒ   rn   )rn   r   r~   Z
trans_pathr    r   r   r   Útest_transformed_pathi  s     
þ
þrø   c                  C   sl   t  ¡ } tjdddd| d}t  |¡}| ¡ j}|  d¡ t| ¡ j|d ƒ | 	d¡ t| ¡ j|ƒ d S )Nrî   rH   rì   é‡   r,   r   r«   )
r   r   rÄ   ZWedgeZTransformedPatchPathrõ   rö   r   r   Z
set_radius)r~   rÈ   Ztpatchrn   r   r   r   Útest_transformed_patch_path  s    



rú   Úlocked_elementÚx0Úy0Úx1Úy1c                 C   s€  ddddg}|  | ¡ tj ¡ }tj|f| diŽ}t|| ƒdksDt‚t|d|  ƒdksZt‚|D ]}t||ƒt||ƒks^t‚q^| | ¡ d ¡ t|| ƒdks t‚t|d|  ƒdks¶t‚|D ]}t||ƒt||ƒksºt‚qºt	|d|  d ƒ t|d|  ƒd ksþt‚t
 | ¡ | ¡ k¡st‚t	|d|  dƒ t|| ƒdks>t‚t|d|  ƒdksVt‚|D ] }t||ƒt||ƒksZt‚qZd S )	Nrü   rý   rþ   rÿ   r   Zlocked_r   rJ   )Úremover   r   ÚunitZLockableBboxrÛ   r   Z
set_pointsrb   Úsetattrr1   Úall)rû   Zother_elementsÚorigÚlockedÚelemr   r   r   Útest_lockable_bbox  s*    

r  c                  C   s²   t  ¡ } t  ¡ }| | }| ¡  t |¡}|js6|jr:t‚|  dd¡ |jrR|jsVt‚| ¡ |  ¡ k ¡ snt‚| ¡  t |¡}| dd¡ |jr–t‚| ¡ |  ¡ k ¡ s®t‚d S ©NrH   r   rJ   rD   )r   r   r=   ÚcopyÚ_invalidr   rt   r  ©rê   rÝ   ÚsÚs1Zb1r   r   r   Ú	test_copy²  s    


r  c                  C   s¶   t  ¡ } t  ¡ }| | }| ¡  t |¡}|js6|jr:t‚|  dd¡ |jrR|jrVt‚| ¡ t  ¡  ¡ k ¡ srt‚| ¡  t |¡}| dd¡ |jršt‚| ¡ |  ¡ k ¡ s²t‚d S r  )	r   r   r=   r	  Údeepcopyr
  r   rt   r  r  r   r   r   Útest_deepcopyÅ  s    


r  c               	   C   s<   t  t  ¡ ¡} tjtdd |  t d¡¡ W 5 Q R X d S )Nz`The input and output dims of the new child \(1, 1\) do not match those of current child \(2, 2\)©Úmatchr   )	r   ZTransformWrapperr   r›   rœ   r   Úsetr   rz   rò   r   r   r   Útest_transformwrapperØ  s
    ÿr  Zpng)Ú
extensionsc              	   C   s    t j d¡ t jjdd}t  ddd¡}t| |gddgƒD ]`\}}| ¡ }|j||dd | |t  	|d	  d	 ¡t  
d	t j ¡ ¡ |j ¡  | d
¡ q:d S )Ni!N,r   )Úsizer±   rI   TF)r_   Zdensityr   Zlinear)r1   ÚrandomÚseedÚnormalrM   r|   rå   Úhistr0   Úexpr÷   rŒ   Zcanvasr4   ræ   )Zfig_testZfig_refZsamplesrQ   rç   Z	log_stater6   r   r   r   Útest_scale_swappingà  s    ,
r  c                	   C   sT   t jtdd tjd dd W 5 Q R X t jtdd tjd dd W 5 Q R X d S )NzZ'fontsize' is not a valid value for units; supported values are 'dots', 'points', 'inches'r  Zfontsize)Zunitsz3For units of inches or points a fig kwarg is neededZinches)r›   rœ   r   r   Zoffset_copyr   r   r   r   Útest_offset_copy_errorsî  s    ÿÿr  c                  C   s’   t t ¡ tƒ  d¡ƒ} |  dd¡s&t‚|  dd¡s6t‚|  dd¡rFt‚t t ¡ tƒ  dd¡ƒ} |  dd	¡snt‚|  dd	¡r~t‚|  d
d
¡rŽt‚d S )Né   r©   r«   gš™™™™™Ù¿g333333ë?rª   g      Ð?r]   rZ   rY   )	r	   r   r  r   Z
rotate_degÚcontainsr   rt   Zfully_contains)Zbbr   r   r   Útest_transformedbbox_containsù  s    r   )?r	  Znumpyr1   Znumpy.testingr   r   r   r   r›   Z
matplotlibr   Zmatplotlib.pyplotZpyplotr.   Zmatplotlib.patchesZpatchesrÄ   Zmatplotlib.transformsZ
transformsr   r   r   r	   Zmatplotlib.pathr
   Zmatplotlib.testing.decoratorsr   r   r7   r?   rU   rf   ri   rj   rq   ru   r€   r-   r   r„   r¦   rÎ   rÒ   rÕ   rà   rá   rä   rè   rë   rí   rð   ró   rø   rú   ÚmarkZparametrizer  r  r  r  r  r  r   r   r   r   r   Ú<module>   s`   &
ÿ
#% ]2	
!

