o
    hBT                     @   s  d dl Z d dlZd dlZd dlZd dlmZmZ d dlZd dl	m
Z
mZmZ d dlmZ d dlmZmZ d dlmZ edgddd	d
 Zedgde dkrQd ndddd Zedgdddd Zdd Zdd Zdd Zejdd ejd ejd ejd gejdd dgd d! Zd"d# Z ed$gdd%dd&d' Z!e
 d(d) Z"e
 d*d+ Z#ed,gddd-d. Z$ed/gddd0d1 Z%d2d3 Z&d4d5 Z'ed6gddd7d8 Z(ed9gddd:d; Z)ed<gd=d> Z*d?d@ Z+dAdB Z,dS )C    N)assert_array_almost_equalassert_array_equal)check_figures_equalimage_comparisonremove_ticks_and_titles)patches
transforms)PathclippingT)remove_textc                  C   sL   t ddd} t dt j |  }t \}}|j| |dd |d d S )N               @{Gz?         ?)	linewidth)gɿgQѿ)nparangesinpipltsubplotsplotset_ylim)tsfigax r   x/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/matplotlib/tests/test_simplification.pytest_clipping   s
   r    overflowx86_64gy&1|?)r   tolc                  C   sD   t g d} t t| }t \}}|| | |dd d S )N)r   r         @g     jAr      )r   arrayr   lenr   r   r   set_xlimxyr   r   r   r   r   test_overflow   s
   r,   clipping_diamondc                  C   sP   t g d} t g d}t \}}|| | |dd |dd d S )N)r   r   r         r   )r   r   r.   r   r   g333333g333333?)r   r&   r   r   r   r(   r   r)   r   r   r   test_diamond*   s   r/   c                  C   s   t g d} | jdd}t|jdg |jt jgksJ t g dt jt jt jg} | jdd}t|jdg |jt jgks?J t g dt jt jt jg} |  }| jdd}t|j|j t|j|j d S )N)r   r      r   r   r2   )
   r4      r5   clipr0   )r0   r1   )r      )	r	   cleanedr   verticescodesSTOPMOVETOLINETOCURVE3)path
simplifiedsimplified_clippedr   r   r   test_clipping_out_of_bounds5   s"   rC   c                  C   s   t jd t jjddd } t \}}|j| ddd}|j  |d 	 }|d 
 }||}|jdd	}|jjd
ksAJ d S )Nr   P  size2   roundr   solid_joinstyler   Tsimplifyic  )r   randomseeduniformr   r   r   canvasdrawget_pathget_transformtransform_pathr9   r:   rF   r*   r   r   p1r@   	transformrA   r   r   r   
test_noiseL   s   

rX   c                  C   s  dd } g d}g d}| ||}t ddgddgddgd	dgg|jd d
d d f  g d}g d}| ||}t ddgdd	gddgd	dgg|jd d
d d f  g d}g d}| ||}t ddgdd	gddgddgd	dgg|jd d
d d f  g d}g d}| ||}t ddgddgd	dgg|jd d
d d f  g d}g d}| ||}t ddgddgdd	gd	dgg|jd d
d d f  d S )Nc                 S   sX   t  \}}|| |}|d  }|d  }||}|jdd}| |}|S )Nr   TrK   )r   r   r   rR   rS   rT   r9   inverted)r*   r+   r   r   rV   r@   rW   rA   r   r   r   _get_simplified^   s   
z9test_antiparallel_simplification.<locals>._get_simplified)r   r   r   r   r   r2   )      ?r2   r2   r   r[   r   r[   r.   r   r   )r[   r2   r\   r2   r]   r[   g       )r[   r2   r\   r2   r   r[   )r[   r2   r   r2   r8   r[   r$   )r[   r2   r   r2   r2   r[   )r   r:   )rZ   r*   r+   rA   r   r   r    test_antiparallel_simplification]   sf   




r^   angle   r8   r   offsetr[   c                 C   s@  d}t jd t jd| | }d|d< d|d< t | | }t | | }|dd   }|dd   }|dd   }|dd   }	|dkrhtddg||g||	g|d |d gddggg dd}
ntddg||g|d |d gddggg d	d}
tt 	||gj
}|jd
d}t|
j|j t|
j|j d S )N   i!N,   r   r2   r\   )r2   r   r   r   r   )r;   )r2   r   r   r   TrK   )r   rM   rN   randr   cosmaxminr	   vstackTr9   r   r:   r   r;   )r_   ra   scalevert_offsetsr*   r+   x_maxx_miny_maxy_min
p_expectedpp2r   r   r   test_angled_antiparallel   sB   rs   c                  C   s   t jd t t dt jd dt jjddd  } t \}}|j	| ddd}|j
  |d  }|d  }||}|jdd	}|jjd
ksNJ d S )Nr   r   rD   rE   r   rH   rI   TrK   ib  )r   rM   rN   r   linspacer   rO   r   r   r   rP   rQ   rR   rS   rT   r9   r:   rF   rU   r   r   r   test_sine_plus_noise   s   

ru   simplify_curveg rh?c                  C   sx   t jtdddtjdfddddgtjtjtjtjtjtjtjtjgdd} t	 \}}|
|  |d	 |d	 d S )
Nr0   r2   r   r2   r2   r2   )r   r   r   r   none)fc)r   r   )r   	PathPatchr	   r   nanr=   r?   	CLOSEPOLYr   r   	add_patchr(   r   )pp1r   r   r   r   r   test_simplify_curve   s   

r   c                 C   s  |  dd }| dd }tdtjgddgddgddgddggtjtjtjtjtjg}|d t	j
|dd tdtjgddgddgddgdtjggtjtjtjtjtjg}|d t	j
|dd tddgddgddgdtjgddggtjtjtjtjtjg}|d t	j
|dd tddgddgddgdtjgddggtjtjtjtjtjg}|d t	j
|dd tdtjgddgddgddgddgddgddgddgdtjgddgg
tjtjtjtjtjtjtjtjtjtjg
}|d t	j
|dd tdtjgddgddgddgdtjgddgddgddgdtjgddgg
tjtjtjtjtjtjtjtjtjtjg
}|d t	j
|dd td	d	gdd	gdtjgddgd	dgd	d	ggtjtjtjtjtjtjg}|d t	j
|dd td	d	gdd	gdtjgddgd	dgd	d	ggtjtjtjtjtjtjg}|d t	j
|dd tddgddgddgdtjgddgddggtjtjtjtjtjtjg}|d t	j
|dd tddgddgddgdtjgddgddggtjtjtjtjtjtjg}|d t	j
|dd td	d	gdd	gdtjgddgddgd	dgd	d	ggtjtjtjtjtjtjtjg}|d t	j
|dd td	d	gdd	gdtjgddgddgd	dgd	d	ggtjtjtjtjtjtjtjg}|d t	j
|dd tddgddgddgdtjgddgddgddggtjtjtjtjtjtjtjg}|d t	j
|dd tddgddgddgdtjgddgddgddggtjtjtjtjtjtjtjg}|d t	j
|dd tddgddgddgddgdtjgddgddggtjtjtjtjtjtjtjg}|d t	j
|dd tddgddgddgddgdtjgddgddggtjtjtjtjtjtjtjg}|d t	j
|dd g |j|jD ]
}|jd
d
d qNt|  t| d S )Nr   r8   r   rz   	facecolorr]   r2   r\   )g      g      @)xlimylim)r   flattenr	   r   r}   r=   r>   r~   r   r   r|   r?   CURVE4flatsetr   )fig_testfig_refax_testax_refr@   r   r   r   r   test_closed_path_nan_removal   s   "$""  " ((((......r   c              
   C   sR  g }t dD ]J}d| d }ddgddgddgddgd|d  dgd|d  |g|d |g|d dgg}tj||dd}t||d dd d f f}|| qtt|d tj}tj	|d< tj
|d	< t|t|}t|}| d
 t||}| tj|dd |d
 | }tj||tj
k< t||}|tj|dd d S )N   g?g      g      ?r2   r   r   )axisr\   )rb   rb   rz   r   )ranger   rollconcatenateappendfullr'   r	   r>   r=   r~   tileset_size_inches
add_artistr   r|   copy)r   r   r:   r   ra   patternr;   r@   r   r   r   test_closed_path_clippingg  s.   






r   hatch_simplifyc               	   C   s>   t  \} }|t jdddddd |d |d d S )Nr0   r2   F/)fillhatch)g?g?)r   r   r   	Rectangler(   r   )r   r   r   r   r   
test_hatch  s   
r   	fft_peaksc               
   C   s   t  \} }td}|ttjtdtj d | t	t
| }| j  |d  }|d  }||}|jdd}|jjdksKJ d S )Ni   r   r   r   TrK   $   )r   r   r   r   r   absfftr   r   blackmanr'   rP   rQ   rR   rS   rT   r9   r:   rF   )r   r   r   rV   r@   rW   rA   r   r   r   test_fft_peaks  s   
8

r   c                  C   sz   d} t jt| dd}|t|d df}t|}|jt	 dd}t
|}t|dks0J |d d tjks;J d S )	Ns  
ZwAAAAku+v9UAQAA+Tj6/z8CAADpQ/r/KAMAANlO+v8QBAAAyVn6//UEAAC6ZPr/2gUAAKpv+v+8
BgAAm3r6/50HAACLhfr/ewgAAHyQ+v9ZCQAAbZv6/zQKAABepvr/DgsAAE+x+v/lCwAAQLz6/7wM
AAAxx/r/kA0AACPS+v9jDgAAFN36/zQPAAAF6Pr/AxAAAPfy+v/QEAAA6f36/5wRAADbCPv/ZhIA
AMwT+/8uEwAAvh77//UTAACwKfv/uRQAAKM0+/98FQAAlT/7/z0WAACHSvv//RYAAHlV+/+7FwAA
bGD7/3cYAABea/v/MRkAAFF2+//pGQAARIH7/6AaAAA3jPv/VRsAACmX+/8JHAAAHKL7/7ocAAAP
rfv/ah0AAAO4+/8YHgAA9sL7/8QeAADpzfv/bx8AANzY+/8YIAAA0OP7/78gAADD7vv/ZCEAALf5
+/8IIgAAqwT8/6kiAACeD/z/SiMAAJIa/P/oIwAAhiX8/4QkAAB6MPz/HyUAAG47/P+4JQAAYkb8
/1AmAABWUfz/5SYAAEpc/P95JwAAPmf8/wsoAAAzcvz/nCgAACd9/P8qKQAAHIj8/7cpAAAQk/z/
QyoAAAWe/P/MKgAA+aj8/1QrAADus/z/2isAAOO+/P9eLAAA2Mn8/+AsAADM1Pz/YS0AAMHf/P/g
LQAAtur8/10uAACr9fz/2C4AAKEA/f9SLwAAlgv9/8ovAACLFv3/QDAAAIAh/f+1MAAAdSz9/ycx
AABrN/3/mDEAAGBC/f8IMgAAVk39/3UyAABLWP3/4TIAAEFj/f9LMwAANm79/7MzAAAsef3/GjQA
ACKE/f9+NAAAF4/9/+E0AAANmv3/QzUAAAOl/f+iNQAA+a/9/wA2AADvuv3/XDYAAOXF/f+2NgAA
29D9/w83AADR2/3/ZjcAAMfm/f+7NwAAvfH9/w44AACz/P3/XzgAAKkH/v+vOAAAnxL+//04AACW
Hf7/SjkAAIwo/v+UOQAAgjP+/905AAB5Pv7/JDoAAG9J/v9pOgAAZVT+/606AABcX/7/7zoAAFJq
/v8vOwAASXX+/207AAA/gP7/qjsAADaL/v/lOwAALZb+/x48AAAjof7/VTwAABqs/v+LPAAAELf+
/788AAAHwv7/8TwAAP7M/v8hPQAA9df+/1A9AADr4v7/fT0AAOLt/v+oPQAA2fj+/9E9AADQA///
+T0AAMYO//8fPgAAvRn//0M+AAC0JP//ZT4AAKsv//+GPgAAojr//6U+AACZRf//wj4AAJBQ///d
PgAAh1v///c+AAB+Zv//Dz8AAHRx//8lPwAAa3z//zk/AABih///TD8AAFmS//9dPwAAUJ3//2w/
AABHqP//ej8AAD6z//+FPwAANb7//48/AAAsyf//lz8AACPU//+ePwAAGt///6M/AAAR6v//pj8A
AAj1//+nPwAA/////w==z<i4)dtyper   )r   r         Y@r   r6   r2   r   )r   
frombufferbase64decodebytesreshaper'   r	   iter_segmentsr   IdentityTransformlistr=   )datavertsr@   segsr   r   r   test_start_with_moveto  s   
r   c                  C   s   dt jd< td} tjd}tj|d< t  \}}|| | t	
t |t  W d    d S 1 s9w   Y  d S )NFzpath.simplifyi i  )r   rcParamsr   r   rM   rd   r}   r   r   pytestraisesOverflowErrorsavefigioBytesIO)xxyyr   r   r   r   r   (test_throw_rendering_complexity_exceeded  s   


"r   clipper_edgec                  C   s   d} t jdd}|jddddd |jdddd	}||  |jt d
 |jt d
 |j	d |j	d |
dd d S )N)
r   r2   r   r   r   r8   r   r`   r   rb   r3   )figsizer   )leftbottomwspacehspace)r   r   r   r   )r   rb   F)r   autoscale_onr2   r   r   rb   	   )r   figuresubplots_adjustadd_axesr   xaxisset_major_locatorMultipleLocatoryaxisset_ticks_positionr(   )datr   r   r   r   r   test_clipper  s   
r   para_equal_perpc                  C   sj   t g ddgd  } t g ddgd  }t \}}|| d |d  || d |d d d S )N)r   r2   r   r2   r   r\   r   r2   r2      )r2   r2   r   r2   r   r\   r   r   r   ro)r   r&   r   r   r   r)   r   r   r   test_para_equal_perp  s
   r   clipping_with_nansc                  C   sP   t ddd} t | }t j| d d d< t \}}|| | |dd d S )Nr   gQ@i  d   g      пg      ?)r   rt   r   r}   r   r   r   r   r)   r   r   r   test_clipping_with_nans  s   
r   c                  C   s   t ddggd } t| jg dd}|g ksJ t ddgddggd	d
g} t| jg dd}dd |D ddgd	fddgd
fgksEJ t ddggd	g} t| jg dd}dd |D ddgd	fgkshJ d S )Ngꌠ9Y>)Frb   )r   r   r   r   r6   rG   (   K   A   r2   r   c                 S      g | ]
\}}t ||fqS r   r   .0r*   r+   r   r   r   
<listcomp>      z&test_clipping_full.<locals>.<listcomp>c                 S   r   r   r   r   r   r   r   r     r   )r	   r   r   )rq   rA   r   r   r   test_clipping_full  s   r   c                  C   s
  t dddtjtjfgt jt jt jt jgt g dt jt jt jt jgg} t g dt jt jt jt jt jt jg}| D ]}|jdd}t|j	|j	 t|j
|j
 q9t dddtjtjfdd	d
tjtjfgt jt jt jt jt jt jt jt jg}t g dt jt jt jt jt jt jt jt jt jt jg
}|jdd}t|j	|j	 t|j
|j
 t dddtjtjfdd
dddg	t jt jt jt jt jt jt jt jt jg	}t dddtjtjfdd
ddddg
t jt jt jt jt jt jt jt jt jt jg
}|jdd}t|j	|j	 t|j
|j
 d S )Nrx   r3   ry   )rx   r3   ry   )r   rG   )rx   r3   ry   rx   rx   r0   TrK   r\   r   r]   r   r]   r2   )
rx   r3   ry   rx   r   r   r   r   r   r0   rw   )r2   r\   )r   r\   )r\   r\   )r\   r2   )r   r\   r0   )r	   r   r}   r=   r>   r~   r<   r9   r   r:   r;   )pathsexpected_pathr@   simplified_pathr   r   r   test_simplify_closepoly  sj   r   )-r   r   platformnumpyr   numpy.testingr   r   r   matplotlib.testing.decoratorsr   r   r   matplotlib.pyplotpyplotr   
matplotlibr   r   matplotlib.pathr	   r    machiner,   r/   rC   rX   r^   markparametrizer   rs   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sZ    
	
	

&O,

k
(

"

	

