o
    îÇh¾  ã                   @   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mZ d dlmZ d dlmZmZ d dlmZ G dd	„ d	ƒZG d
d„ dƒ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.„ Z0d/d0„ Z1d1d2„ Z2d3d4„ Z3d5d6„ Z4d7d8„ Z5d9d:„ Z6d;d<„ Z7d=d>„ Z8d?d@„ Z9dAdB„ Z:ej; <dCg dD¢¡dEdF„ ƒZ=dGdH„ Z>edIgdJdKdL„ ƒZ?dMdN„ Z@dOdP„ ZAdQdR„ ZBdSdT„ ZCdUdV„ ZDdWdX„ ZEdS )Yé    N)Úassert_allcloseÚassert_almost_equalÚassert_array_equalÚassert_array_almost_equal)Úscale)ÚAffine2DÚBboxÚTransformedBboxÚ_ScaledRotation)ÚPath)Úimage_comparisonÚcheck_figures_equal)Ú	MagicMockc                   @   s¶   e Zd ZddgZddgddgddggZe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 d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(S ))ÚTestAffine2Dç      ð?ç        ç       @ç      @ç      @c                 C   sb   t g d¢g d¢g d¢gƒ t t g d¢g d¢g d¢gt¡ƒ t t g d¢g d¢g d¢gt¡ƒ d S )N©é   é   é   )é   é   é   )é   é   é	   )r   ÚnpÚarrayÚintÚfloat©Úself© r%   út/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/matplotlib/tests/test_transforms.pyÚ	test_init   s   "&zTestAffine2D.test_initc                 C   s0   t j d¡ t j d¡}ttj|Ž  ¡ |ƒ d S )Né!N,r   )r   ÚrandomÚseedr   r   Úfrom_valuesÚ	to_values©r$   Úvaluesr%   r%   r&   Útest_values   s   zTestAffine2D.test_valuesc                 C   s:   t ƒ }| ¡ }d|d< t| ¡ g d¢g d¢g d¢gƒ d S )Né*   ©r   r   )r0   r   r   ©r   r   r   ©r   r   r   )r   Ú
get_matrixr   )r$   ÚtransÚmtxr%   r%   r&   Útest_modify_inplace!   s   $z TestAffine2D.test_modify_inplacec                 C   sB   t tj dd¡d ƒ}| ¡  t| ¡ g d¢g d¢g d¢gƒ d S )Nr   r   )r   r   r   r2   r3   )r   r   r)   ÚrandÚclearr   r4   )r$   Úar%   r%   r&   Ú
test_clear(   s   $zTestAffine2D.test_clearc                 C   sn  t ƒ  tjd ¡}t ƒ  d¡}t| ¡ | ¡ ƒ t| | j	¡ddgƒ t| | j
¡ddgddgdd	ggƒ t ƒ  tj¡}t ƒ  d
¡}t| ¡ | ¡ ƒ t| | j	¡ddgƒ t| | j
¡ddgddgddggƒ t ƒ  dtj d ¡}t ƒ  d¡}t| ¡ | ¡ ƒ t| | j	¡ddgƒ t| | j
¡ddgddgddggƒ t||  ¡ | ¡ ƒ t||  ¡ | ¡ ƒ d S )Nr   éZ   éÿÿÿÿr   éþÿÿÿr   éýÿÿÿr   r   é´   éüÿÿÿé  )r   Úrotater   ÚpiÚ
rotate_degr   r4   r   Ú	transformÚsingle_pointÚmultiple_points©r$   Úr_pi_2Úr90Úr_piÚr180Úr_pi_3_2Úr270r%   r%   r&   Útest_rotate-   s.   ÿÿÿzTestAffine2D.test_rotatec                 C   s¶  t ƒ jg | j¢tjd ‘R Ž }t ƒ jg | j¢d‘R Ž }t| ¡ | ¡ ƒ t| 	| j
¡ddgƒ t| 	| j¡ddgddgddggƒ t ƒ jg | j¢tj‘R Ž }t ƒ jg | j¢d‘R Ž }t| ¡ | ¡ ƒ t| 	| j
¡ddgƒ t| 	| j¡ddgddgd	dggƒ t ƒ jg | j¢dtj d ‘R Ž }t ƒ jg | j¢d
‘R Ž }t| ¡ | ¡ ƒ t| 	| j
¡ddgƒ t| 	| j¡ddgddgdd	ggƒ t||  ¡ | ¡ ƒ t||  ¡ | ¡ ƒ d S )Nr   r<   r   r   r=   r   r   r@   r>   rB   )r   Úrotate_aroundÚpivotr   rD   Úrotate_deg_aroundr   r4   r   rF   rG   rH   rI   r%   r%   r&   Útest_rotate_aroundF   s.   ÿÿ"ÿzTestAffine2D.test_rotate_aroundc                 C   s~   t ƒ  dd¡}t ƒ  dd¡}t ƒ  dd¡}t||  ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡ddgddgddggƒ d S )	Nr   r   r>   r   rA   r   éúÿÿÿé   )r   r   r   r4   rF   rG   rH   )r$   ÚsxÚsyr5   r%   r%   r&   Ú
test_scale_   ó   ÿzTestAffine2D.test_scalec                 C   s†   t ƒ  tjd tjd ¡}t ƒ  dd¡}t| ¡ | ¡ ƒ t ƒ  dd¡}t| | j	¡ddgƒ t| | j
¡d	d
gddgdd	ggƒ d S )Nr   rV   g     €6@é   çÈ2§:@ç™b‚Ž,@ç      ø?ç      ô?r   r   ç      @g      @r   )r   Úskewr   rD   Úskew_degr   r4   r   rF   rG   rH   )r$   Ú	trans_radÚ	trans_degr5   r%   r%   r&   Ú	test_skewh   s   ÿzTestAffine2D.test_skewc                 C   s~   t ƒ  dd¡}t ƒ  dd¡}t ƒ  dd¡}t||  ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡ddgddgd	dggƒ d S )
Né   r   r0   é   é+   é,   é   é-   é   )r   Ú	translater   r4   rF   rG   rH   )r$   ÚtxÚtyr5   r%   r%   r&   Útest_translater   rZ   zTestAffine2D.test_translatec                 C   s   t ƒ  d¡jg | j¢d‘R Ž }t ƒ  d¡t ƒ jg | j¢d‘R Ž  }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j	¡ddgddgdd	ggƒ t ƒ  d¡ 
dd	¡}t ƒ  d¡t ƒ  
dd	¡ }t| ¡ | ¡ ƒ t| | j¡d
d	gƒ t| | j	¡ddgddgddggƒ t ƒ  d¡ dd¡}t ƒ  d¡t ƒ  dd¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j	¡d	dgddgddggƒ t ƒ  d¡ dd¡}t ƒ  d¡t ƒ  dd¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j	¡ddgddgddggƒ d S )Nr<   r@   r   r   r   r   r   r=   r>   r?   rU   r   i÷ÿÿÿéøÿÿÿr\   r]   g      à¿ç      è?g      ø¿g      @rf   r0   é   rh   é   é   rk   é.   )r   rE   rS   rR   r   r4   r   rF   rG   rH   r   rb   rm   ©r$   r5   Útrans_addedr%   r%   r&   Útest_rotate_plus_other{   sD   
ÿÿÿ
ÿ
ÿÿÿz#TestAffine2D.test_rotate_plus_otherc                 C   sH  t ƒ jg | j¢d‘R Ž  d¡}t ƒ jg | j¢d‘R Ž t ƒ  d¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j	¡ddgddgddggƒ t ƒ jg | j¢d‘R Ž  
d	d¡}t ƒ jg | j¢d‘R Ž t ƒ  
d	d¡ }t| ¡ | ¡ ƒ t| | j¡d	dgƒ t| | j	¡ddgdd
gddggƒ t ƒ jg | j¢d‘R Ž  dd¡}t ƒ jg | j¢d‘R Ž t ƒ  dd¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j	¡ddgddgddggƒ t ƒ jg | j¢d‘R Ž  dd¡}t ƒ jg | j¢d‘R Ž t ƒ  dd¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j	¡ddgddgddggƒ d S )Nr<   r@   r=   r   r   r?   r>   rA   r   rU   r   rq   r\   r]   r^   r_   ç      à?g      @r   r`   rf   r0   rg   rh   rs   rk   é   rv   )r   rS   rR   rE   r   r4   r   rF   rG   rH   r   rb   rm   rw   r%   r%   r&   Útest_rotate_around_plus_other›   sL   
ÿÿ ÿÿÿÿÿ ÿÿz*TestAffine2D.test_rotate_around_plus_otherc                 C   s  t ƒ  dd¡ d¡}t ƒ  dd¡t ƒ  d¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡ddgddgdd	ggƒ t ƒ  dd¡j	g | j
¢d‘R Ž }t ƒ  dd¡t ƒ j	g | j
¢d‘R Ž  }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡ddgd
dgdd	ggƒ t ƒ  dd¡ dd¡}t ƒ  dd¡t ƒ  dd¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡ddgddgd	dggƒ t ƒ  dd¡ dd¡}t ƒ  dd¡t ƒ  dd¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡ddgddgddggƒ d S )Nr   r>   r<   r   r   r   r   r   rV   r   r\   r]   ç      ô¿rA   ç      Àrf   r0   rj   é(   é&   é    é$   é#   )r   r   rE   r   r4   rF   rG   r   rH   rS   rR   rb   rm   rw   r%   r%   r&   Útest_scale_plus_other½   sD   ÿ ÿÿÿÿÿÿz"TestAffine2D.test_scale_plus_otherc                 C   s  t ƒ  dd¡ d¡}t ƒ  dd¡t ƒ  d¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡ddgdd	gd
dggƒ t ƒ  dd¡j	g | j
¢d‘R Ž }t ƒ  dd¡t ƒ j	g | j
¢d‘R Ž  }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡ddgdd	gddggƒ t ƒ  dd¡ dd¡}t ƒ  dd¡t ƒ  dd¡ }t| ¡ | ¡ ƒ t| | j¡d	dgƒ t| | j¡ddgddgddggƒ t ƒ  dd¡ dd¡}t ƒ  dd¡t ƒ  dd¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡ddgddgddggƒ d S )Nr\   r]   r<   r}   r^   r>   r   r~   r`   r=   r   rr   r   g      ü¿r   g      ÀrA   g      +@g      ÀrV   rf   r0   g     €8@g      E@rg   ri   g     €;@g     àF@rl   rh   )r   rb   rE   r   r4   r   rF   rG   rH   rS   rR   r   rm   rw   r%   r%   r&   Útest_skew_plus_otherÝ   sT   
ÿÿÿÿÿÿÿÿÿÿÿz!TestAffine2D.test_skew_plus_otherc                 C   s  t ƒ  dd¡ d¡}t ƒ  dd¡t ƒ  d¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡ddgddgd	d
ggƒ t ƒ  dd¡j	g | j
¢d‘R Ž }t ƒ  dd¡t ƒ j	g | j
¢d‘R Ž  }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡d	dgddgdd
ggƒ t ƒ  dd¡ dd¡}t ƒ  dd¡t ƒ  dd¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡ddgddgddggƒ t ƒ  dd¡ dd¡}t ƒ  dd¡t ƒ  dd¡ }t| ¡ | ¡ ƒ t| | j¡ddgƒ t| | j¡ddgddgdd ggƒ d S )!Nrf   r0   r<   iÕÿÿÿrg   iÔÿÿÿiÓÿÿÿrj   iÖÿÿÿrl   i×ÿÿÿiØÿÿÿr   r>   éH   iªÿÿÿéE   i¨ÿÿÿéN   i¦ÿÿÿéQ   i¬ÿÿÿr\   r]   g     ÀF@é1   rk   g     àH@g     @H@g     ÀI@é0   g     `H@)r   rm   rE   r   r4   r   rF   rG   rH   rS   rR   r   rb   rw   r%   r%   r&   Útest_translate_plus_other   sD   ÿ ÿÿÿÿÿÿz&TestAffine2D.test_translate_plus_otherc                 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 )Nr   r   )Úmtransformsr   ÚpytestÚraisesÚ
ValueErrorrF   ÚRuntimeError)r$   Útr%   r%   r&   Útest_invalid_transform   s&   ÿÿÿÿÿ"ÿz#TestAffine2D.test_invalid_transformc                 C   s¬   t  ¡ }t  ¡ }|| }| ¡  t |¡}|js|jrJ ‚| dd¡ |jr)|js+J ‚| ¡ | ¡ k ¡ s7J ‚| ¡  t |¡}| dd¡ |jrKJ ‚t| ¡ | ¡ ƒ d S ©Nr   r   r   r   )r   r   r4   ÚcopyÚ_invalidrm   Úallr   ©r$   r:   ÚbÚsÚs1Úb1r%   r%   r&   Ú	test_copy4  s   


zTestAffine2D.test_copyc                 C   sª   t  ¡ }t  ¡ }|| }| ¡  t |¡}|js|jrJ ‚| dd¡ |jr)|jr+J ‚t| ¡ t  ¡  ¡ ƒ | ¡  t |¡}| dd¡ |jrJJ ‚t| ¡ | ¡ ƒ d S r”   )r   r   r4   r•   Údeepcopyr–   rm   r   r˜   r%   r%   r&   Útest_deepcopyF  s   


zTestAffine2D.test_deepcopyN)Ú__name__Ú
__module__Ú__qualname__rG   rH   rR   r'   r/   r7   r;   rP   rT   rY   re   rp   ry   r|   r„   r…   rŒ   r“   r   rŸ   r%   r%   r%   r&   r      s*    	
	 " # r   c                   @   s   e Zd Zdd„ ZdS )ÚTestAffineDeltaTransformc                 C   s¢   t  g d¢g d¢g d¢g¡}t  g d¢g d¢g d¢g¡}tj dddddd	¡}t |¡}t| ¡ |ƒ d	| ¡ d
dd …f< t| ¡ |ƒ | ¡  t| ¡ |ƒ d S )N)r   r   r   )g      @r   r   )r   r   r   )r   r   r   r   r   r   r   r   r   )	r   r    r   r   r+   ÚAffineDeltaTransformr   r4   Ú
invalidate)r$   ÚbeforeÚafterÚbaser’   r%   r%   r&   Útest_invalidateZ  s   
þ
þ
z(TestAffineDeltaTransform.test_invalidateN)r    r¡   r¢   r©   r%   r%   r%   r&   r£   Y  s    r£   c                  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.

        r   Fc                    s.   t ƒ j|i |¤Ž d| _t ¡  dd¡| _d S )NFé
   )ÚsuperÚ__init__Úraise_on_transformr   r   r   Úunderlying_transform)r$   ÚargsÚkwargs©Ú	__class__r%   r&   r¬   |  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®   rF   r¶   r%   r%   r&   Útransform_non_affine‡  r¹   zQtest_non_affine_caching.<locals>.AssertingNonAffineTransform.transform_non_affine)r    r¡   r¢   Ú__doc__Ú
input_dimsÚoutput_dimsÚ	is_affiner¬   r¸   rµ   rº   rF   Ú__classcell__r%   r%   r±   r&   ÚAssertingNonAffineTransforms  s    rÀ   rª   ©rF   T)r   Ú	TransformÚpltÚaxesÚplotr   ÚarangeÚ	transDataÚdrawr­   Ú	transAxesr¥   )rÀ   Úmy_transÚaxr%   r%   r&   Útest_non_affine_cachingr  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¬   š  s   
z6test_external_transform_api.<locals>.ScaledBy.__init__c                 S   s   t  ¡  | j¡|j S rÍ   )r   r   r   rÎ   rÇ   )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&   ÚScaledBy™  s    rÑ   rª   rÁ   r   éd   )rÃ   rÄ   rÅ   r   rÆ   Úset_xlimÚset_ylimr   Úget_transformÚ_ar4   r   r   r   )rÑ   rË   Úliner%   r%   r&   Útest_external_transform_api˜  s   ÿrØ   Ú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ª   r‹   r   r   rÁ   r   r   r   g      @r   ru   r   r   r   )rF   Ú	linewidthr   )rÃ   rÄ   r   r   r   Úcontourfr   rÆ   ÚreshaperÇ   Ú
pcolormeshÚlinspaceÚscatterÚsinÚcosÚnewaxisÚ
streamplotÚhypotÚquiverÚbarbs)rË   Útimes10ÚxÚyÚuÚvr%   r%   r&   Útest_pre_transform_plottingª  s,   "ýÿ&"
ÿ2.rð   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 )Nr[   ru   çÍÌÌÌÌÌ(@ç      )@çš™™™™™¹?rÁ   r^   ç×£p=
×ó?r   r_   )rÃ   rÄ   r   Úmeshgridrâ   rß   Úlogr   r   r   rÇ   r    r   ÚdataLimÚ
get_points©rË   ÚxsÚysÚexpectedr%   r%   r&   Ú!test_contour_pre_transform_limitsÏ  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 ©Nr[   ru   rñ   rò   r=   ró   rÁ   r^   rô   r   r_   )rÃ   rÄ   r   rõ   râ   Úpcolorrö   r   r   r   rÇ   r    r   r÷   rø   rù   r%   r%   r&   Ú test_pcolor_pre_transform_limitsÚ  ó   $$ÿ
ÿr  c                  C   rþ   rÿ   )rÃ   rÄ   r   rõ   râ   rá   rö   r   r   r   rÇ   r    r   r÷   rø   rù   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 )Nr(   r   r@   r   rÒ   iè  rª   éo   Úpolar©Ú
projectionée   Úgouraud)Úshading)r   r)   r*   râ   rõ   Úradiansr8   ÚshaperÃ   ÚfigureÚadd_subplotÚset_rlimrá   ÚcanvasrÈ   )r.   ÚradiiÚzrí   rì   ÚfigrË   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ª   ru   r=   r   r   r>   r   é<   r   éP   r   r   )r   r    r   r   r+   rF   r   )Úpointsr’   Úactualrü   r%   r%   r&   Útest_Affine2D_from_values  s8   
þ










r  c                  C   sX   ddg} t  ¡ }t| | | ¡  | ¡¡ƒ | dd¡ ¡  t| | | ¡  | ¡¡ƒ d S )Nr   )r   r   r   rF   Úinvertedrm   r4   )Ú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  ru   )r  ru   rª   Úclip)r   r   rÒ   rÒ   F)r   Úsimplifyr=   )r   Ú_create_closedr   ÚBlendedGenericTransformr   r   ÚLogTransformr¸   Úiter_segmentsÚ
get_affineÚzipr   Úcodes)r·   r5   ÚtpathÚresultÚtpointsÚtcodesr%   r%   r&   Útest_clipping_of_log5  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¬   N  s   zNonAffineForTest.__init__c                 C   ó   | j  |¡S rÍ   )r/  rF   r-   r%   r%   r&   rº   R  ó   z%NonAffineForTest.transform_non_affinec                 C   r0  rÍ   )r/  rµ   r¶   r%   r%   r&   r¸   U  r1  z*NonAffineForTest.transform_path_non_affine)r    r¡   r¢   r»   r¾   r½   r¼   r¬   rº   r¸   r¿   r%   r%   r±   r&   r.  C  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   Úta3r   Útn1Útn2Útn3)r   r   rC   r   rD   r3  rm   r5  r   r6  r.  r7  r8  r9  Ústack1Ústack2Ústack2_subsetr#   r%   r%   r&   Úsetup_methodZ  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 )Nr   r   )r:  Údepthr;  r<  r#   r%   r%   r&   Útest_transform_depths  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>)r3  r7  r5  r8  r6  Ú_iter_break_from_left_to_rightÚlenr'  )r$   Ústack3Útarget_transformsÚrÚtarget_stackÚstackr%   r%   r&   Útest_left_to_right_iterationx  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 )Nr   )r:  r<  r3  r;  r  r>  rŽ   r   r   r5  r6  r7  )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 ‚t 	| j
| j¡}| | j¡\}}| j| }| | j¡\}}||  u rÃdu sÆJ ‚ J ‚||  u rÑdu sÔJ ‚ J ‚d S )NFT)r5  r3  Úcontains_branchr:  r6  r;  r<  r7  r   r#  r8  Úcontains_branch_seperatelyr9  )	r$   Úr1Úr2Úblendrì   rí   Ústack_blendrW   rX   r%   r%   r&   Útest_contains_branchž  s0   
 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ª   ru   r   r=   )Údtyper   r   g      3Àç      (@g      &@r   g      "Àg      8@)r   r    ÚnanÚfloat64r:  rº   rF   r   Útransform_affiner&  r5  r6  r4   r   r;  )r$   r  Úna_ptsÚall_ptsÚna_expectedÚall_expectedÚexpected_resultr*  r%   r%   r&   Útest_affine_simplification¿  s8    ÿÿÿÿþ

ÿÿ
z-TestBasicTransform.test_affine_simplificationN)	r    r¡   r¢   r=  r?  rK  rN  rU  r`  r%   r%   r%   r&   r2  Y  s    !r2  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©ró   ç333333ó?çš™™™™™é?©çÍÌÌÌÌÌì?rz   rd  rÁ   )
rÃ   rÄ   rÅ   rÉ   r   r÷   rø   r   r    Úinf©r$   rË   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 )Nrb  re  rÁ   ró   rz   rc  rf  )	rÃ   rÄ   rÅ   rÇ   r   r÷   rø   r   r    rh  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 )Nrb  ©rƒ   éûÿÿÿé   rÁ   g      Àg     €A@)rÃ   rÄ   r   Úblended_transform_factoryrÉ   rÇ   rÅ   r   r÷   rø   r   r    rg  ©r$   rË   r5   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ª   rb  rk  rÁ   r   ç      IÀrW  ç     àu@)rÃ   rÄ   r   r   r   rÇ   rÅ   r   r÷   rø   r   r    ro  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ª   rb  rk  rÁ   rq  rr  )rÃ   rÄ   r   rn  rÉ   r   r   rÇ   rÅ   r   r÷   rø   r   r    rg  ro  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   r   rm   rÅ   r   rÆ   rÇ   r    r   r÷   rø   ©r$   rË   Ú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   ru  ru   )rÃ   rÄ   r   r   rm   r.  rÅ   r   rÆ   rÇ   r    r   r÷   rø   )r$   rË   rx  Ú	na_offsetry  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   ç      $@ru   )rÃ   rÄ   r   r   rm   r.  r   ÚmpatchesÚ	PathPatchrÇ   Ú	add_patchr   r    r   r÷   rø   )r$   rË   rx  r{  ÚpthÚpatchry  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   rm   r   r~  r  rÇ   r€  r   r    r   r÷   rø   )r$   rË   rx  r  r‚  ry  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   ru  rv  rw  r%   r%   r&   Ú*test_line_extents_for_non_affine_transData5  s
   zETestTransformPlotInterface.test_line_extents_for_non_affine_transDataN)r    r¡   r¢   ri  rj  rp  rs  rt  rz  r|  rƒ  r„  r…  r%   r%   r%   r&   ra  å  s    
	ra  c                 C   s   t | j|jƒ d S rÍ   )r   Úbounds)Úbbox1Úbbox2r%   r%   r&   Úassert_bbox_eqB  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_minposF  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   r   rz   r^   rr   g      @r   )r   r   r‹  Úintersectionr‰  )Úbbox_from_extÚinterrQ  rR  Úr3Úr4Úr5r%   r%   r&   Útest_bbox_intersectionL  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 )Nrz   r   rr   r   z.1f)
r   r   r‰  ÚevalÚreprÚstrÚdictÚitemsÚgetattrÚformat)r™   ÚasdictÚkrï   Úfmtr%   r%   r&   Útest_bbox_as_stringsb  s   ÿr   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Ã   ÚsubplotrÇ   r%   r%   r%   r&   Útest_str_transformn  s   r¢  c                  C   s$   t  ¡ } |  d¡}|jdksJ ‚d S )N©r   r   )r   )r   r   rZ  r  )r’   rH  r%   r%   r&   Útest_transform_single_point   s   
r¤  c                  C   s&   t  ¡ \} }| d¡ |j d¡ d S )Nrö   r£  )rÃ   ÚsubplotsÚ
set_yscalerÇ   rF   )r  rË   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   r   )r   r   r   rX  Úoverlaps)r:   r™   r%   r%   r&   Útest_nan_overlap®  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)ru   rk   r  r   r   r   )	r   r   r   r    Útransform_anglesr   rŽ   r   r   )r’   Úanglesr  Ú
new_anglesr%   r%   r&   Útest_transform_angles´  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   r1   )r   güó     )r   r    rX  r   Únonsingularr   )Úzero_expansionÚcasesr¯   Úoutr%   r%   r&   Útest_nonsingularÆ  s   þr²  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)r1   ©r   r   r£  ©r   r   T)Úclosedr   r   r   r1   r   çVçž¯Ò<©Úatol)r   r   r   ÚTransformedPathr   Úget_fully_transformed_pathÚverticesr   ÚsqrtrC   rD   r  )r  r·   r5   Ú
trans_pathrR  r%   r%   r&   Útest_transformed_pathÏ  s    
þ

þr¾  c                  C   sl   t  ¡ } tjdddd| d}t  |¡}| ¡ j}|  d¡ t| ¡ j|d ƒ | 	d¡ t| ¡ j|ƒ d S )Nr1   r   rk   é‡   rÁ   r   rz   )
r   r   r~  ÚWedgeÚTransformedPatchPathrº  r»  r   r   Ú
set_radius)r5   r‚  Útpatchr  r%   r%   r&   Útest_transformed_patch_pathå  s   



rÄ  Ú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ª   r   )Úremover   r   ÚunitÚLockableBboxr›  Ú
set_pointsrø   Úsetattrr   r—   )rÅ  Úother_elementsÚorigÚlockedÚelemr%   r%   r&   Útest_lockable_bboxö  s,   

ÿrÕ  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$  )r’   r%   r%   r&   Útest_transformwrapper  s   ÿ"ýrÚ  Ú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ª   )Úsizerl  r   TF)rö   Údensityr   Úlinear)r   r)   r*   Únormalrâ   r'  r¥  ÚhistrÅ   Úexpr¼  rD   r  rÈ   r¦  )Úfig_testÚfig_refÚsamplesrì   r  Ú	log_staterË   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'rÖ  Ú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é   rd  rz   gš™™™™™Ù¿g333333ë?rf  g      Ð?r_   r^   ró   )r	   r   rÍ  r   rE   Úcontainsrm   Úfully_contains)Úbbr%   r%   r&   Útest_transformedbbox_contains9  s   rñ  c                   C   sd   t  dd¡sJ ‚t  dd¡sJ ‚t  dd¡sJ ‚t  dd¡r J ‚t  dd¡r(J ‚t  dd¡s0J ‚d S ©Nr´  rz   r   r   r=   r   r³  )r   Úinterval_containsr%   r%   r%   r&   Útest_interval_containsD  ó   rô  c                   C   sd   t  dd¡sJ ‚t  dd¡rJ ‚t  dd¡rJ ‚t  dd¡r J ‚t  dd¡r(J ‚t  dd¡s0J ‚d S rò  )r   Úinterval_contains_openr%   r%   r%   r&   Útest_interval_contains_openM  rõ  r÷  c                  C   sB   d} t ƒ }t| |ƒ}|j| ksJ ‚|j|ksJ ‚|jdu sJ ‚dS )z=Test that the ScaledRotation object is initialized correctly.r   N)r   r
   Ú_thetaÚ_trans_shiftÚ_mtx)ÚthetaÚtrans_shiftÚ
scaled_rotr%   r%   r&   Ú"test_scaledrotation_initializationV  s   
rþ  c                  C   sŽ   t jd } tt| dggdd}t| |ƒ}d|_| ¡ }|j | dgg¡ t  ddgddgg¡}|dus6J ‚t	|dd…dd…f |d	d
 dS )zCTest get_matrix when the matrix is invalid and needs recalculation.r   r   )Úreturn_valuerÁ   Tr=   r   Nr¶  r·  )
r   rD   r   r
   r–   r4   rF   Úassert_called_once_withr    r   )rû  rü  rý  ÚmatrixÚexpected_rotationr%   r%   r&   Ú&test_scaledrotation_get_matrix_invalid`  s   


ÿ"r  )Fr•   Únumpyr   Únumpy.testingr   r   r   r   rŽ   Ú
matplotlibr   Úmatplotlib.pyplotÚpyplotrÃ   Úmatplotlib.patchesÚpatchesr~  Úmatplotlib.transformsÚ
transformsr   r   r   r	   r
   Úmatplotlib.pathr   Úmatplotlib.testing.decoratorsr   r   Úunittest.mockr   r   r£   rÌ   rØ   rð   rý   r  r  r  r  r  r-  rÂ   r.  r2  ra  r‰  rŽ  r•  r   r¢  r¤  r§  r©  r­  r²  r¾  rÄ  ÚmarkÚparametrizerÕ  rÚ  rç  rì  rñ  rô  r÷  rþ  r  r%   r%   r%   r&   Ú<module>   sp      I&
ÿ
#% ]2	
!

		
