a
    ضa`I                     @   s  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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d.d/ Z#d0d1 Z$d2d3 Z%e
d4gddd5d6 Z&e
d7gddd8d9 Z'e
d:gd;d< Z(d=d> Z)dS )?    N)assert_array_almost_equalassert_array_equal)check_figures_equalimage_comparisonremove_ticks_and_titles)patches
transforms)PathZ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   t/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/matplotlib/tests/test_simplification.pytest_clipping   s
    r   Zoverflowc                  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(   Z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s8J 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   r-   )
   r/      r0   Zclipr+   )r+   r,   )r      )	r	   cleanedr   verticescodesSTOPMOVETOLINETOCURVE3)path
simplifiedZsimplified_clippedr   r   r   test_clipping_out_of_bounds3   s"    r<   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sJ d S )Nr   P  size2   roundr   Zsolid_joinstyler   TZsimplifyic  )r   randomseeduniformr   r   r   canvasdrawget_pathget_transformtransform_pathr3   r4   r?   r&   r   r   p1r:   	transformr;   r   r   r   
test_noiseJ   s    

rO   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   TrC   )r   r   r   rI   rJ   rK   r3   inverted)r&   r'   r   r   rM   r:   rN   r;   r   r   r   _get_simplified\   s    
z9test_antiparallel_simplification.<locals>._get_simplified)r   r   r   r   r   r-   )      ?r-   r-   r   rR   r   rR   r)   r   r   )rR   r-   rS   r-   rT   rR   g       )rR   r-   rS   r-   r   rR   )rR   r-   r   r-   r2   rR   r    )rR   r-   r   r-   r-   rR   )r   r4   )rQ   r&   r'   r;   r   r   r    test_antiparallel_simplification[   sf    




rU   angle   r2   r   offsetrR   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rtddg||g||	g|d |d gddggg dd}
n0t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   r-   rS   )r-   r   r   r   r   )r5   )r-   r   r   r   TrC   )r   rD   rE   randr   cosmaxminr	   ZvstackTr3   r   r4   r   r5   )rV   rX   ZscaleZvert_offsetsr&   r'   Zx_maxZx_minZy_maxZy_minZ
p_expectedpp2r   r   r   test_angled_antiparallel   sB    rb   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sJ d S )Nr   r   r=   r>   r   rA   rB   TrC   ib  )r   rD   rE   r   linspacer   rF   r   r   r   rG   rH   rI   rJ   rK   r3   r4   r?   rL   r   r   r   test_sine_plus_noise   s    

rd   Zsimplify_curveg rh?)r
   Ztolc                  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 )
Nr+   )r-   r   )r-   r-   r-   )r   r   )r   r   none)Zfc)r   r   )r   	PathPatchr	   r   nanr7   r9   	CLOSEPOLYr   r   	add_patchr$   r   )Zpp1r   r   r   r   r   test_simplify_curve   s    

rj   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 qt|  t| d S )Nr   r2   r   re   Z	facecolorrT   r-   rS   )g      g      @)Zxlimylim)r   flattenr	   r   rg   r7   r8   rh   ri   r   rf   r9   ZCURVE4Zflatsetr   )fig_testfig_refZax_testZax_refr:   r   r   r   r   test_closed_path_nan_removal   s    "$""  " ((((......rr   c              
   C   sR  g }t dD ]}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      ?r-   r   r   )ZaxisrS   )rY   rY   re   rl   )ranger   rollZconcatenateappendfullr#   r	   r8   r7   rh   ZtileZset_size_inchesZ
add_artistr   rf   copy)rp   rq   r4   ru   rX   patternr5   r:   r   r   r   test_closed_path_clippinge  s.    






rz   Zhatch_simplifyc               	   C   s>   t  \} }|t jdddddd |d |d d S )Nr+   r-   F/)fillZhatch)g?g?)r   r   ri   Z	Rectangler$   r   )r   r   r   r   r   
test_hatch  s    
r}   Z	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sJ d S )Ni   r   r   r   TrC   $   )r   r   r   r   r   absZfftr   r   Zblackmanr#   rG   rH   rI   rJ   rK   r3   r4   r?   )r   r   r   rM   r:   rN   r;   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s`J |d d tjksvJ 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)Zdtyper   )r   r         Y@r   r1   r-   r   )r   Z
frombufferbase64decodebytesZreshaper#   r	   iter_segmentsr   ZIdentityTransformlistr7   )dataZvertsr:   Z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    n1 sp0    Y  d S )NFzpath.simplifyi i  )r   ZrcParamsr   r   rD   r[   rg   r   r   pytestZraisesOverflowErrorZsavefigioBytesIO)xxyyr   r   r   r   r   (test_throw_rendering_complexity_exceeded  s    


r   Z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   r-   r   r   r   r2   r   rW   r   rY   r.   )Zfigsizer   )leftbottomZwspaceZhspace)r   r   r   r   )r   rY   F)rm   Zautoscale_onr-   r   r   rY   	   )r   figureZsubplots_adjustZadd_axesr   ZxaxisZset_major_locatorZMultipleLocatorZyaxisZset_ticks_positionr$   )Zdatr   r   r   r   r   test_clipper  s    
r   Z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   r-   r   r-   r   rS   r   r-   r-      )r-   r-   r   r-   r   rS   r   r   r   ro)r   r"   r   r   r   r%   r   r   r   test_para_equal_perp  s
    r   Z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   rc   r   rg   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s2J 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sJ t ddggd	g} t| jg dd}dd |D ddgd	fgksJ d S )Ngꌠ9Y>)FrY   )r   r   r   r   r1   r@   (   K   A   r-   r   c                 S   s   g | ]\}}t ||fqS r   r   .0r&   r'   r   r   r   
<listcomp>       z&test_clipping_full.<locals>.<listcomp>c                 S   s   g | ]\}}t ||fqS r   r   r   r   r   r   r     r   )r	   r   r   )r`   r;   r   r   r   test_clipping_full  s    r   )*r   r   Znumpyr   Znumpy.testingr   r   r   Zmatplotlib.testing.decoratorsr   r   r   Zmatplotlib.pyplotZpyplotr   Z
matplotlibr   r   Zmatplotlib.pathr	   r   r(   r*   r<   rO   rU   markZparametrizer   rb   rd   rj   rr   rz   r}   r   r   r   r   r   r   r   r   r   r   r   <module>   sP   
	
	

O&,

k
(

"

	

