o
    ˆ‚¡ev  ã                   @   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$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.d0d1„ Z/d2d3„ Z0d4d5„ Z1d6d7„ Z2d8d9„ Z3d:d;„ Z4d<d=„ Z5d>d?„ Z6ej7 8d@g dA¢¡dBdC„ ƒZ9dDdE„ Z:dFdG„ Z;dHdI„ Z<edJgdKdLdM„ ƒZ=dNdO„ Z>dPdQ„ Z?dS )Ré    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|i |¤Ž d| _t ¡  dd¡| _d S )NFé
   )ÚsuperÚ__init__Úraise_on_transformÚmtransformsr   r   Úunderlying_transform)ÚselfÚargsÚkwargs©Ú	__class__© úO/var/www/myenv/lib/python3.10/site-packages/matplotlib/tests/test_transforms.pyr      s   zEtest_non_affine_caching.<locals>.AssertingNonAffineTransform.__init__c                 S   ó   | j rJ dƒ‚| j |¡S ©Nz3Invalidated affine part of transform unnecessarily.)r   r   Útransform_path©r   Úpathr   r   r   Útransform_path_non_affine    ó   ÿzVtest_non_affine_caching.<locals>.AssertingNonAffineTransform.transform_path_non_affinec                 S   r   r   )r   r   Ú	transformr   r   r   r   Útransform_non_affine&   r!   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   Ú	transAxesÚ
invalidate)r,   Úmy_transÚaxr   r   r   Útest_non_affine_caching   s   
r:   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   Úscale_factorr   r   r   r   9   s   
z6test_external_transform_api.<locals>.ScaledBy.__init__c                 S   s   t  ¡  | j¡|j S r;   )r   r   r   r<   r4   )r   r0   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/   r0   r1   r2   r3   Úset_xlimÚset_ylimr   Úget_transformÚ_aÚ
get_matrixr   r   r   )r?   r9   Úliner   r   r   Útest_external_transform_api7   s   ÿrG   Úpre_transform_dataTÚmpl20gš™™™™™©?)Úremove_textÚstyleÚ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"   Ú	linewidthé   )r/   r0   r   r   r   Úcontourfr2   r3   Úreshaper4   Ú
pcolormeshÚlinspaceÚscatterÚsinÚcosÚnewaxisÚ
streamplotÚhypotÚquiverÚbarbs)r9   Útimes10ÚxÚyÚuÚvr   r   r   Útest_pre_transform_plottingI   s,   "ýÿ&"
ÿ2.ri   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é   rS   çÍÌÌÌÌÌ(@ç      )@çš™™™™™¹?r-   ç      ø?ç×£p=
×ó?ç       @ç      ô?)r/   r0   r2   Úmeshgridr[   rX   Úlogr   r   r   r4   Úarrayr   ÚdataLimÚ
get_points©r9   ÚxsÚysÚexpectedr   r   r   Ú!test_contour_pre_transform_limitsn   s   $ÿ
ÿr{   c                  C   ó’   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 ©Nrj   rS   rk   rl   éÿÿÿÿrm   r-   rn   ro   rp   rq   )r/   r0   r2   rr   r[   Úpcolorrs   r   r   r   r4   rt   r   ru   rv   rw   r   r   r   Ú test_pcolor_pre_transform_limitsy   ó   $$ÿ
ÿr€   c                  C   r|   r}   )r/   r0   r2   rr   r[   rZ   rs   r   r   r   r4   rt   r   ru   rv   rw   r   r   r   Ú$test_pcolormesh_pre_transform_limits…   r   r‚   c                  C   s’   t j d¡ t  ddd¡} t  ddd¡}t  | |¡\}}t  t jj|jŽ d ¡}t 	¡ }|j
dd	d
}| dd¡ |j|||dd |j ¡  d S )Né!N,r   é´   rW   r@   iè  r   éo   Úpolar©Ú
projectionée   Úgouraud)Úshading)r2   ÚrandomÚseedr[   rr   ÚradiansÚrandÚshaper/   ÚfigureÚadd_subplotÚset_rlimrZ   Úcanvasr5   )ÚvaluesÚradiiÚzrf   re   Úfigr9   r   r   r   Útest_pcolormesh_gouraud_nans‘   s   r™   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   rS   r~   rT   r   éþÿÿÿrW   é<   rP   éP   rU   rN   )r2   rt   r   r   Úfrom_valuesr"   r   )ÚpointsÚtÚactualrz   r   r   r   Útest_Affine2D_from_values¤   s8   
þ










r¡   c                  C   sX   ddg} t  ¡ }t| | | ¡  | ¡¡ƒ | dd¡ ¡  t| | | ¡  | ¡¡ƒ d S )Nç      ð?)r   r   r   r"   ÚinvertedÚ	translaterE   )ÚpointrŸ   r   r   r   Ú test_affine_inverted_invalidatedÉ   s
   r¦   c                  C   sh   t  g d¢¡} t t ¡ t dd¡¡}| | ¡}|j| 	¡ ddd}t
|Ž \}}t|| jd d… ƒ d S )N))çš™™™™™É?éÿÿÿ)çš™™™™™Ù?r¨   )r©   rS   )r§   rS   r   Úclip)r   r   r@   r@   F)rª   Úsimplifyr~   )r
   Ú_create_closedr   ÚBlendedGenericTransformr   r   ÚLogTransformr    Úiter_segmentsÚ
get_affineÚzipr   Úcodes)r   ÚtransÚtpathÚresultÚtpointsÚ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|i |¤Ž d S r;   )Ú
real_transr   r   )r   rº   r   r   r   r   r   r   í   s   zNonAffineForTest.__init__c                 C   ó   | j  |¡S r;   )rº   r"   )r   r•   r   r   r   r#   ñ   ó   z%NonAffineForTest.transform_non_affinec                 C   r»   r;   )rº   r   r   r   r   r   r    ô   r¼   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)Úshorthand_namer   Úta2r   r   Úta3rT   Útn1Útn2Útn3)r   r   Úrotater2   Úpir¾   r¤   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J ‚| jjdksJ ‚| jjdksJ ‚d S )NrP   rW   )rÇ   ÚdepthrÈ   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?J ‚t||ƒD ]
\}}||ksNJ ‚qDd S )Nc                 S   s   g | ]\}}|‘qS r   r   )Ú.0Ú_Úrhr   r   r   Ú
<listcomp>!  s    zCTestBasicTransform.test_left_to_right_iteration.<locals>.<listcomp>)r¾   rÂ   rÀ   rÃ   rÁ   Ú_iter_break_from_left_to_rightÚlenr±   )r   Ústack3Útarget_transformsÚrÚtarget_stackÚstackr   r   r   Útest_left_to_right_iteration  s   
üÿz/TestBasicTransform.test_left_to_right_iterationc                 C   sN  | j | j | jksJ ‚| j| j | jksJ ‚| j| j | j ¡ ks#J ‚| j| j jdks.J ‚t t¡ | j | j  W d   ƒ n1 sDw   Y  | j| j	| j
  }| j	| j
 }|| | jksaJ ‚|| j	 || j	 ¡  ksoJ ‚| j | j
 | j| j| j	  ks€J ‚| j| j
 | j| j | j	 ks‘J ‚| j	| j
 | j
 | j
 | j	| j
 ks¥J ‚d S )NrT   )rÇ   rÉ   r¾   rÈ   r£   rÌ   ÚpytestÚraisesÚ
ValueErrorrÀ   rÁ   rÂ   )r   Úaff1Úaff2r   r   r   Útest_transform_shortcuts'  s    ÿ""
ÿz+TestBasicTransform.test_transform_shortcutsc                 C   s:  | j | j }| j | j }||ksJ ‚|| jksJ ‚| |¡s J ‚| | j¡s(J ‚| | j ¡r0J ‚| | j | j  ¡r;J ‚||ksAJ ‚| j | j¡sJJ ‚| j | j¡sSJ ‚| j | j¡s\J ‚| j | j¡seJ ‚| j | j¡rnJ ‚| j | j¡rwJ ‚| j | j | j ¡sƒJ ‚| j | j | j ¡sJ ‚| j | j| j  ¡r›J ‚d S r;   )rÀ   r¾   Ú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   rS   rT   r~   )Údtyper¢   rp   g      3Àç      (@g      &@g      @g      "Àg      8@)r2   rt   ÚnanÚfloat64rÇ   r#   r"   r   Útransform_affiner°   rÀ   rÁ   rE   r   rÈ   )r   rž   Úna_ptsÚall_ptsÚna_expectedÚall_expectedÚexpected_resultrµ   r   r   r   Útest_affine_simplificationW  s8    ÿÿÿÿþ

ÿÿ
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   sT   t  ¡ }|jg d¢g d¢|jd t|j ¡ t tj	tj	gtj	 tj	 gg¡ƒ d S )N©rm   ç333333ó?çš™™™™™é?©çÍÌÌÌÌÌì?ç      à?rò   r-   )
r/   r0   r1   r6   r   ru   rv   r2   rt   Úinf©r   r9   r   r   r   Útest_line_extent_axes_coords~  s   
ÿÿz7TestTransformPlotInterface.test_line_extent_axes_coordsc                 C   sH   t  ¡ }|jg d¢g d¢|jd t|j ¡ t ddgddgg¡ƒ d S )Nrð   ró   r-   rm   rõ   rñ   rô   )	r/   r0   r1   r4   r   ru   rv   r2   rt   r÷   r   r   r   Útest_line_extent_data_coords†  s
   
ÿz7TestTransformPlotInterface.test_line_extent_data_coordsc                 C   s\   t  ¡ }t |j|j¡}|jg d¢g d¢|d t|j 	¡ t
 t
jdgt
j dgg¡ƒ d S )Nrð   ©é#   éûÿÿÿé   r-   g      Àg     €A@)r/   r0   r   Úblended_transform_factoryr6   r4   r1   r   ru   rv   r2   rt   rö   ©r   r9   r³   r   r   r   Ú!test_line_extent_compound_coords1  s   ÿ

ÿÿz<TestTransformPlotInterface.test_line_extent_compound_coords1c                 C   sZ   t  ¡ }t ¡  d¡|j }|jg d¢g d¢|d t|j 	¡ t
 ddgddgg¡ƒ d S )	Nr   rð   rú   r-   r¢   ç      IÀrå   ç     àu@)r/   r0   r   r   r   r4   r1   r   ru   rv   r2   rt   rÿ   r   r   r   Ú)test_line_extent_predata_transform_coords˜  s   
ÿzDTestTransformPlotInterface.test_line_extent_predata_transform_coordsc                 C   sj   t  ¡ }t |jt ¡  d¡|j ¡}|jg d¢g d¢|d t	|j
 ¡ t tjdgtj dgg¡ƒ d S )Nr   rð   rú   r-   r  r  )r/   r0   r   rþ   r6   r   r   r4   r1   r   ru   rv   r2   rt   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/   r0   r   r   r¤   r1   r2   r3   r4   rt   r   ru   rv   ©r   r9   Ú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  rS   )r/   r0   r   r   r¤   r¹   r1   r2   r3   r4   rt   r   ru   rv   )r   r9   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  ç      $@rS   )r/   r0   r   r   r¤   r¹   r
   ÚmpatchesÚ	PathPatchr4   Ú	add_patchr2   rt   r   ru   rv   )r   r9   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/   r0   r   r   r¤   r
   r  r  r4   r  r2   rt   r   ru   rv   )r   r9   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 )Nr†   r‡   r   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ï   }  s    
	rï   c                 C   s   t | j|jƒ d S r;   )r   Úbounds)Úbbox1Ú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  r¢   )Úminpos)r   r   Úfrom_extentsÚfrozenr   r  )Ú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 u sQJ ‚t|||ƒ| ddddƒƒ d S )Nr   rT   rõ   rn   ç      è?g      @r   )r   r   r  Úintersectionr  )Úbbox_from_extÚinterrá   râ   Úr3Úr4Ú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s2J ‚q%d}tt	| |ƒdtiƒ}| ¡ D ]\}}tt	t| |ƒ|ƒƒ|ksUJ ‚qCd S )Nrõ   r   r   r   z.1f)
r   r   r  ÚevalÚreprÚstrÚdictÚitemsÚgetattrÚformat)ÚbÚasdictÚkrh   Úfmtr   r   r   Útest_bbox_as_stringsú  s   ÿr3  c                   C   s   t tjddjƒdksJ ‚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/   Úsubplotr4   r   r   r   r   Útest_str_transform  s   r5  c                  C   s$   t  ¡ } |  d¡}|jdksJ ‚d S )N©rT   rT   )r   )r   r   rè   r   )rŸ   rÖ   r   r   r   Útest_transform_single_point8  s   
r7  c                  C   s&   t  ¡ \} }| d¡ |j d¡ d S )Nrs   r6  )r/   ÚsubplotsÚ
set_yscaler4   r"   )r˜   r9   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J ‚d S )Nr   rT   )r   r   r2   ræ   Úoverlaps)Úar/  r   r   r   Útest_nan_overlapF  s   r=  c                  C   sÚ   t  ¡ } t g d¢¡}t ddgddgddgg¡}|  ||¡}t||ƒ t t¡ |  ||dd…dd…f ¡ W d   ƒ n1 sBw   Y  t t¡ |  ||dd…d d …f ¡ W d   ƒ d S 1 sfw   Y  d S )N)rS   é-   r›   r   rT   r   )	r   r   r2   rt   Útransform_anglesr   rÚ   rÛ   rÜ   )rŸ   Úanglesrž   Ú
new_anglesr   r   r   Útest_transform_anglesL  s   
ÿ"ÿrB  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üó     )r2   rt   ræ   r   Únonsingularr   )Úzero_expansionÚcasesr   Úoutr   r   r   Útest_nonsingular^  s   þrH  c                  C   sX  t  ¡ } t t¡ |  d¡ W d   ƒ n1 sw   Y  t t¡ |  dggg¡ W d   ƒ n1 s6w   Y  t t¡ |  g ¡ W d   ƒ n1 sPw   Y  t t¡ |  dg¡ W d   ƒ n1 skw   Y  t t¡ |  dgg¡ W d   ƒ n1 s‡w   Y  t t¡ |  g d¢g¡ W d   ƒ d S 1 s¥w   Y  d S )NrT   )rT   r   rW   )r   r   rÚ   rÛ   rÜ   r"   ÚRuntimeError©rŸ   r   r   r   Útest_invalid_argumentsg  s&   ÿÿÿÿÿ"ÿrK  c                  C   sÂ   g d¢} 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 )N)rC  )rT   r   r6  )r   rT   T)ÚclosedrT   r   rP   rC  r   gVçž¯Ò<)Úatol)r
   r   r   ÚTransformedPathr   Úget_fully_transformed_pathÚverticesr2   ÚsqrtrÅ   rÆ   rž   )rž   r   r³   Ú
trans_pathrâ   r   r   r   Útest_transformed_path|  s    
þ

þrS  c                  C   sl   t  ¡ } tjdddd| d}t  |¡}| ¡ j}|  d¡ t| ¡ j|d ƒ | 	d¡ t| ¡ j|ƒ d S )NrC  rT   r>  é‡   r-   r   rõ   )
r   r   r  ÚWedgeÚTransformedPatchPathrO  rP  r   r   Ú
set_radius)r³   r  Útpatchrž   r   r   r   Útest_transformed_patch_path’  s   



rY  Úlocked_element©Úx0Úy0Úx1Úy1c                 C   sv  g d¢}|  | ¡ tj ¡ }tj|fi | di¤Ž}t|| ƒdks"J ‚t|d|  ƒdks-J ‚|D ]}t||ƒt||ƒks=J ‚q/| | ¡ d ¡ t|| ƒdksPJ ‚t|d|  ƒdks[J ‚|D ]}t||ƒt||ƒkskJ ‚q]t|d|  d ƒ t|d|  ƒd u sJ ‚t	 
| ¡ | ¡ k¡sŒJ ‚t|d|  dƒ t|| ƒdksJ ‚t|d|  ƒdks¨J ‚|D ]}t||ƒt||ƒks¸J ‚qªd S )Nr[  r   Úlocked_r   rW   )Úremover   r   ÚunitÚLockableBboxr-  Ú
set_pointsrv   Úsetattrr2   Úall)rZ  Úother_elementsÚorigÚlockedÚelemr   r   r   Útest_lockable_bbox£  s,   

ÿrk  c                  C   s²   t  ¡ } t  ¡ }| | }| ¡  t |¡}|js|jrJ ‚|  dd¡ |jr)|js+J ‚| ¡ |  ¡ k ¡ s7J ‚| ¡  t |¡}| dd¡ |jrKJ ‚| ¡ |  ¡ k ¡ sWJ ‚d S ©NrT   r   rW   rP   )r   r   rE   ÚcopyÚ_invalidr¤   rf  ©r<  r/  ÚsÚs1Úb1r   r   r   Ú	test_copyÅ  s   


rs  c                  C   s¶   t  ¡ } t  ¡ }| | }| ¡  t |¡}|js|jrJ ‚|  dd¡ |jr)|jr+J ‚| ¡ t  ¡  ¡ k ¡ s9J ‚| ¡  t |¡}| dd¡ |jrMJ ‚| ¡ |  ¡ k ¡ sYJ ‚d S rl  )r   r   rE   rm  Údeepcopyrn  r¤   rf  ro  r   r   r   Útest_deepcopyØ  s   


ru  c                  C   sR   t  t  ¡ ¡} tjtdd |  t d¡¡ W d   ƒ d S 1 s"w   Y  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   ÚTransformWrapperr   rÚ   rÛ   rÜ   Úsetr   r®   rJ  r   r   r   Útest_transformwrapperë  s   ÿ"ýrz  Úpng)Ú
extensionsc              	   C   s    t j d¡ t jjdd}t  ddd¡}t| |gddgƒD ]0\}}| ¡ }|j||dd | |t  	|d	  d	 ¡t  
d	t j ¡ ¡ |j ¡  | d
¡ qd S )Nrƒ   r   )Úsizerü   rU   TF)rs   Údensityr   Úlinear)r2   rŒ   r   Únormalr[   r±   r8  Úhistr1   ÚexprQ  rÆ   r”   r5   r9  )Úfig_testÚfig_refÚsamplesre   r˜   Ú	log_stater9   r   r   r   Útest_scale_swappingó  s   ,
ûr‡  c                   C   s~   t jtdd tjd dd W d   ƒ n1 sw   Y  t jtdd tjd dd W d   ƒ d S 1 s8w   Y  d S )NzZ'fontsize' is not a valid value for units; supported values are 'dots', 'points', 'inches'rv  Úfontsize)Úunitsz3For units of inches or points a fig kwarg is neededÚinches)rÚ   rÛ   rÜ   r   Úoffset_copyr   r   r   r   Útest_offset_copy_errors  s   ÿýÿ"þrŒ  c                  C   s’   t t ¡ tƒ  d¡ƒ} |  dd¡sJ ‚|  dd¡sJ ‚|  dd¡r#J ‚t t ¡ tƒ  dd¡ƒ} |  dd	¡s7J ‚|  dd	¡r?J ‚|  d
d
¡rGJ ‚d S )Né   rò   rõ   gš™™™™™Ù¿g333333ë?rô   g      Ð?rq   rn   rm   )r	   r   rb  r   Ú
rotate_degÚcontainsr¤   Úfully_contains)Úbbr   r   r   Útest_transformedbbox_contains  s   r’  )@rm  Únumpyr2   Únumpy.testingr   r   r   r   rÚ   Ú
matplotlibr   Úmatplotlib.pyplotÚpyplotr/   Úmatplotlib.patchesÚpatchesr  Úmatplotlib.transformsÚ
transformsr   r   r   r	   Úmatplotlib.pathr
   Úmatplotlib.testing.decoratorsr   r   r:   rG   ri   r{   r€   r‚   r™   r¡   r¦   r¸   r.   r¹   r½   rï   r  r  r'  r3  r5  r7  r:  r=  rB  rH  rK  rS  rY  ÚmarkÚparametrizerk  rs  ru  rz  r‡  rŒ  r’  r   r   r   r   Ú<module>   sd    &
ÿ
#% ]2	
!

