o
    ¹i˜j  ã                   @   sv  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 d dl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)d/d0„ Z*d1d2„ Z+d3d4„ Z,d5d6„ Z-d7d8„ Z.d9d:„ Z/ej0 1d;g d<¢¡d=d>„ ƒZ2dS )?é    N)Úassert_allcloseÚassert_almost_equalÚassert_array_equalÚassert_array_almost_equal)Úscale)ÚPath)Úimage_comparisonc                  C   s^   G dd„ dt jƒ} | ƒ }t ¡ }tjt d¡||j d t ¡  d|_	|j
 ¡  t ¡  d S )Nc                   @   s<   e Zd ZdZd ZZdZdd„ Zdd„ ZeZ	dd	„ Z
e
Zd
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                 _   s6   t jj| g|¢R i |¤Ž d| _t  ¡  dd¡| _d S )NFé
   )ÚmtransformsÚ	TransformÚ__init__Úraise_on_transformÚAffine2Dr   Úunderlying_transform)ÚselfÚargsÚkwargs© r   ú[/var/www/edux/Edux_v2/venv/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_affineN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
input_dimsÚoutput_dimsÚ	is_affiner   r   r   r   r   r   r   r   r   ÚAssertingNonAffineTransform   s    r&   r
   ©r   T)r   r   ÚpltÚaxesÚplotÚnpÚarangeÚ	transDataÚdrawr   Ú	transAxesÚ
invalidate)r&   Úmy_transÚaxr   r   r   Útest_non_affine_caching   s   
r3   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   6   s   
z6test_external_transform_api.<locals>.ScaledBy.__init__c                 S   s   t  ¡  | j¡|j S r4   )r   r   r   r5   r-   )r   r)   r   r   r   Ú_as_mpl_transform9   s   ÿz?test_external_transform_api.<locals>.ScaledBy._as_mpl_transformN)r   r    r!   r   r7   r   r   r   r   ÚScaledBy5   s    r8   r
   r'   r   éd   )r(   r)   r*   r+   r,   Úset_xlimÚset_ylimr   Úget_transformÚ_aÚ
get_matrixr   r   r   )r8   r2   Úliner   r   r   Útest_external_transform_api4   s   ÿr@   Úpre_transform_datag{®Gáz´?TÚmpl20)ÚtolÚremove_textÚstylec               
   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 ¡ }d}| j|||||| j	 ||f|d |d  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	   g«ªªªªªê?)r   ÚdensityÚ	linewidthé   )r(   r)   r   r   r   Úcontourfr+   r,   Úreshaper-   Ú
pcolormeshÚlinspaceÚscatterÚsinÚcosÚnewaxisÚ
streamplotÚquiverÚbarbs)r2   Útimes10ÚxÚyÚuÚvÚdfr   r   r   Útest_pre_transform_plottingF   s.   "ýÿ&"ÿ2.rc   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é   rL   çÍÌÌÌÌÌ(@ç      )@çš™™™™™¹?r'   ç      ø?ç×£p=
×ó?ç       @ç      ô?)r(   r)   r+   ÚmeshgridrU   rR   Úlogr   r   r   r-   Úarrayr   ÚdataLimÚ
get_points©r2   ÚxsÚysÚexpectedr   r   r   Ú!test_contour_pre_transform_limitsk   s   $ÿ
ÿru   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 ©Nrd   rL   re   rf   éÿÿÿÿrg   r'   rh   ri   rj   rk   )r(   r)   r+   rl   rU   Úpcolorrm   r   r   r   r-   rn   r   ro   rp   rq   r   r   r   Ú test_pcolor_pre_transform_limitsv   ó   $$ÿ
ÿrz   c                  C   rv   rw   )r(   r)   r+   rl   rU   rT   rm   r   r   r   r-   rn   r   ro   rp   rq   r   r   r   Ú$test_pcolormesh_pre_transform_limits‚   r{   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
   rL   rx   rM   r	   éþÿÿÿrQ   é<   rI   éP   rN   rG   )r+   rn   r   r   Úfrom_valuesr   r   )ÚpointsÚtÚactualrt   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Ú	translater>   )Úpointr‚   r   r   r   Ú test_affine_inverted_invalidated³   s
   r‰   c                  C   sb   t g d¢dd} t t ¡ t dd¡¡}| | ¡}|j| ¡ ddd}t	|Ž \}}t
|| jƒ d S )	N)©çš™™™™™É?éÿÿÿ)çš™™™™™Ù?rŒ   )r   rL   )r‹   rL   rŠ   T©Úclosedr
   Úclip)r   r   r9   r9   F)r   Úsimplify)r   r   ÚBlendedGenericTransformr   r   ÚLogTransformr   Úiter_segmentsÚ
get_affineÚzipr   Úcodes)r   ÚtransÚtpathÚresultÚtpointsÚtcodesr   r   r   Útest_clipping_of_log¾   s   ÿÿ

þr   c                   @   s4   e Zd ZdZdZdZdZdd„ Zdd„ Zdd	„ Z	d
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                 O   s$   || _ tjj| g|¢R i |¤Ž d S r4   )Ú
real_transr   r   r   )r   rŸ   r   r   r   r   r   r   Ø   s   zNonAffineForTest.__init__c                 C   ó   | j  |¡S r4   )rŸ   r   )r   Úvaluesr   r   r   r   Ü   ó   z%NonAffineForTest.transform_non_affinec                 C   r    r4   )rŸ   r   r   r   r   r   r   ß   r¢   z*NonAffineForTest.transform_path_non_affineN)
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   Úta3rM   Útn1Útn2Útn3)r   r   Úrotater+   Ú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 )NrI   rQ   )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 )NrM   )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 r4   )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
   rL   rM   rx   )Údtyper…   rj   g      3Àç      (@g      &@g      @g      "Àg      8@)r+   rn   ÚnanÚfloat64r­   r   r   r   Útransform_affiner•   r¦   r§   r>   r   r®   )r   r   Úna_ptsÚall_ptsÚna_expectedÚall_expectedÚexpected_resultrš   r   r   r   Útest_affine_simplificationB  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©rg   ç333333ó?çš™™™™™é?©çÍÌÌÌÌÌì?ç      à?rØ   r'   )
r(   r)   r*   r/   r   ro   rp   r+   rn   Úinf©r   r2   r   r   r   Útest_line_extent_axes_coordsi  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'   rg   rÛ   r×   rÚ   )	r(   r)   r*   r-   r   ro   rp   r+   rn   rÝ   r   r   r   Útest_line_extent_data_coordsq  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(   r)   r   Úblended_transform_factoryr/   r-   r*   r   ro   rp   r+   rn   rÜ   ©r   r2   r˜   r   r   r   Ú!test_line_extent_compound_coords1x  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(   r)   r   r   r   r-   r*   r   ro   rp   r+   rn   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(   r)   r   rä   r/   r   r   r-   r*   r   ro   rp   r+   rn   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   r‡   r*   r+   r,   r-   rn   r   ro   rp   ©r   r2   Ú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ì   rL   )r(   r)   r   r   r‡   rž   r*   r+   r,   r-   rn   r   ro   rp   )r   r2   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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ë   ç      $@rL   )r(   r)   r   r   r‡   rž   r   r+   rn   ÚmpatchesÚ	PathPatchr-   Ú	add_patchr   ro   rp   )r   r2   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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   r‡   r   r+   rn   rõ   rö   r-   r÷   r   ro   rp   )r   r2   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©Ú
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Õ   h  s    
	rÕ   c                 C   s   t | j|jƒ d S r4   )r   Úbounds)Úbbox1Úbbox2r   r   r   Úassert_bbox_eqÅ  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   rM   rÛ   rh   ç      è?g      @r	   )r   ÚBboxÚfrom_extentsÚ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Úkra   Úfmtr   r   r   Útest_bbox_as_stringsß  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(
                    [[1. 0. 0.]
                     [0. 1. 0.]
                     [0. 0. 1.]]),
                Affine2D(
                    [[1. 0. 0.]
                     [0. 1. 0.]
                     [0. 0. 1.]]))),
        PolarTransform(
            PolarAxesSubplot(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(
                                [[1. 0. 0.]
                                 [0. 1. 0.]
                                 [0. 0. 1.]]),
                            Affine2D(
                                [[1. 0. 0.]
                                 [0. 1. 0.]
                                 [0. 0. 1.]]))),
                    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(
                            [[80.  0.  0.]
                             [ 0. 80.  0.]
                             [ 0.  0.  1.]]))))))))r  r(   Úsubplotr-   r   r   r   r   Útest_str_transformë  s   r  c                  C   s$   t  ¡ } |  d¡}|jdksJ ‚d S )N©rM   rM   )r	   )r   r   rÎ   Úshape)r‚   r¼   r   r   r   Útest_transform_single_point,  s   
r  c                  C   s&   t  ¡ \} }| d¡ |j d¡ d S )Nrm   r  )r(   ÚsubplotsÚ
set_yscaler-   r   )Úfigr2   r   r   r   Útest_log_transform2  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   rM   )r   r  r+   rÌ   Úoverlaps)Úar  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)rL   é-   r~   r   rM   r	   )	r   r   r+   rn   Ú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   ©r   r   )r   güó     )r+   rn   rÌ   r   Únonsingularr   )Úzero_expansionÚcasesr   Úoutr   r   r   Útest_nonsingularR  s   þr0  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 )NrM   )rM   r	   rQ   )r   r   rÀ   rÁ   rÂ   r   ÚRuntimeError)r‚   r   r   r   Útest_invalid_arguments[  s&   ÿÿÿÿÿ"ÿr2  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)r+  )rM   r   r  )r   rM   TrŽ   rM   r	   rI   r+  r   gVçž¯Ò<)Úatol)r   r   r   ÚTransformedPathr   Úget_fully_transformed_pathÚverticesr+   Úsqrtr«   r¬   r   )r   r   r˜   Ú
trans_pathrÈ   r   r   r   Útest_transformed_pathp  s    
þ

þr9  c                  C   sl   t  ¡ } tjdddd| d}t  |¡}| ¡ j}|  d¡ t| ¡ j|d ƒ | 	d¡ t| ¡ j|ƒ d S )Nr+  rM   r&  é‡   r'   r	   rÛ   )
r   r   rõ   ÚWedgeÚTransformedPatchPathr5  r6  r   r   Ú
set_radius)r˜   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 )NrA  r	   Úlocked_r
   rQ   )Úremover   r  ÚunitÚLockableBboxr  Ú
set_pointsrp   Úsetattrr+   Úall)r@  Úother_elementsÚorigÚlockedÚelemr   r   r   Útest_lockable_bbox—  s,   

ÿrQ  )3Únumpyr+   Únumpy.testingr   r   r   r   rÀ   Ú
matplotlibr   Úmatplotlib.pyplotÚpyplotr(   Úmatplotlib.patchesÚpatchesrõ   Úmatplotlib.transformsÚ
transformsr   Úmatplotlib.pathr   Úmatplotlib.testing.decoratorsr   r3   r@   rc   ru   rz   r|   r„   r‰   r   r   rž   r£   rÕ   r  r  r  r  r  r"  r%  r*  r0  r2  r9  r?  ÚmarkÚparametrizerQ  r   r   r   r   Ú<module>   sN    &ÿ
#% ]A	