o
    hY                     @   s  d dl Z d dlmZ d dlmZ d dlZd dlZd dlZd dl	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 d dlmZ d d	lmZ d d
lmZmZ dd Z edgdddd Z!edgdddd Z"dd Z#edgdd Z$edgdd Z%edddd  Z&e d!d" Z'ed#d$d%gd&d'd( Z(d)d* Z)ej*+d+ed,d- Z,d.d/ Z-d0d1 Z.d2d3 Z/d4d5 Z0d6d7 Z1d8d9 Z2d:d; Z3d<d= Z4d>d? Z5d@dA Z6edBgdCddDdE Z7edFgdGdH Z8ej9:dIdJdKie;dLfdJdKgie;dMfdNdKie;dOfdNdKgie;dPfdQdKie;dRfdQdKgie;dSfdTdKie;dUfdVdKie;dWfdXdYie<dZfg	d[d\ Z=d]d^ Z>ej9:d_g d`ej9:daddbgdcdd Z?dedf Z@dgdh ZAdS )i    N)BytesIO)Path)Figure)Circle)Text)check_figures_equalimage_comparison)needs_usetex)font_manager)OffsetImageAnnotationBboxc                  C   s   t  \} }tddtj d}t|}t|}|j|||dd\}}}|D ]}|d q(t	 }	| j
|	dd |	 }
W d    n1 sIw   Y  tjj }||
 d S )	Nr      2   ko)yerrfmtFsvgformat)pltsubplotsnplinspacepisin	ones_likeerrorbarset_visibler   savefiggetvaluexmlparsersexpatParserCreateParse)figaxxyr   abcartistfdbufparser r0   u/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/matplotlib/tests/test_backend_svg.pytest_visibility   s   


r2   zfill_black_with_alpha.svgT)remove_textc                  C   s,   t  \} }|jg dg ddddd d S )N)r   皙?   )r   r   r   kr4   i'  )r'   r(   r+   alphas)r   r   scatterr%   r&   r0   r0   r1   test_fill_black_with_alpha)   s    r;   noscalec                  C   sR   t t dddt ddd\} }t |d }t \}}|j|ddd d S )N   r5      graynone)cmapinterpolation)r   meshgridaranger   r   r   imshow)XYZr%   r&   r0   r0   r1   test_noscale/   s   $rJ   c                  C   sv   t  } d}| jd|d t }| j|dd |  }W d    n1 s(w   Y  d| d}||v s9J d S )Nz$http://test_text_urls.matplotlib.orgtest_text_urls)urlr   r   z<a xlink:href="z">)r   figuresuptitler   r   r   decode)r%   test_urlr-   r.   expectedr0   r0   r1   rK   8   s   rK   zbold_font_output.svgc                  C   sN   t  \} }|tdtd |d |jddd |jddd d S )N
   nonbold-xlabelbold-ylabelbold
fontweight
bold-title)r   r   plotr   rE   
set_xlabel
set_ylabel	set_titler:   r0   r0   r1   test_bold_font_outputF   s
   
r]   z'bold_font_output_with_none_fonttype.svgc                  C   sX   dt jd< t  \} }|tdtd |d |jddd |jddd d S )	NrA   svg.fonttyperR   rS   rT   rU   rV   rX   )	r   rcParamsr   rY   r   rE   rZ   r[   r\   r:   r0   r0   r1   (test_bold_font_output_with_none_fonttypeO   s   

r`      )tolc                 C   s   t ddd }t |}t |}| }|j||dddd |j|d |dd	dd |  }|j||dddd
d |j|d |dd	dd
d d S )Nr   d   ffffff@-rrR   )r+   lwr5   r*   Tr+   rg   
rasterized)r   rE   cosr   r   rY   fig_testfig_reftr'   r(   ax_refax_testr0   r0   r1   test_rasterizedY   s   

rq   c              	   C   s8  t ddd }t |}t |}| }|dd |dd |j||ddd	d
d |j|d |ddd	dd |j|d |ddd	d
d |j|d |ddd	d
d |  }|dd |dd |j||ddd	d
dd |j|d |ddd	d
dd |j|d |ddd	d
dd |j|d |ddd	ddd d S )Nr   rc   rd      gg?re   rf   rR   Trh   r5   r*   Fr?   gm)r+   rg   ri   zorderg?gffffff?g333333?)r   rE   rj   r   r   set_xlimset_ylimrY   rk   r0   r0   r1   test_rasterized_orderingh   s"   

 rx   r>   r   pdf)rb   
extensionsc                 C   s   ddg}|  }|j|d g|d gdddd tjd}tjj||d	d
}|| |   }|j|d g|d gddddd tjd}tjj||d	d
}|| d S )Ng?r   r5   r'   blackr?   )markerr+   ru   rG   g @)ru   T)r|   r+   ru   ri   )r   rY   mpl	offsetboxTextArear   
add_artist)rl   rm   locro   r*   aboxrp   r0   r0   r1   test_prevent_rasterization   s    
r   c                  C   sh  dd } t  }|ddd}|  tdD ]}|jddgd|gddd	 q| |d
dks0J | |ddks9J t  }|ddd}|  tdD ]}|jddgd|gddd	 qL| |d
dkseJ | |ddksnJ t  }|ddd}|  tdD ]}|jddg|dgddd	 |jddgd|gddd	 q| |d
dksJ | |ddksJ t  }|ddd}	|	  |	d tdD ]}|	jddg|dgddd	 |	jddgd|gddd	 q| |d
dksJ | |ddksJ t  }
d|
_|
ddd}|  tdD ]}|jddgd|gddd	 q| |
d
dks(J | |
ddks2J d S )Nc                 S   sP   t  }| j|dd |  }W d    n1 sw   Y  |d| S )Nr   r   <)r   r   r   rO   count)r%   tagr-   r.   r0   r0   r1   	count_tag   s
   z%test_count_bitmaps.<locals>.count_tagr5   r>   r   ra   zb-F)ri   imagepath   T)r   rM   add_subplotset_axis_offrangerY   set_rasterizedsuppressComposite)r   fig1ax1nfig2ax2fig3ax3fig4ax4fig5ax5r0   r0   r1   test_count_bitmaps   sP   
r   defaultc                  C   s   t  } | jddddd t }| j|dd | }W d    n1 s%w   Y  tjj|}d}d}t	|
d	| d
| ddksGJ d| |d	| dj v sZJ d S )N      ?z\textwonT)usetexr   r   http://www.w3.org/2000/svgzSFSS3583-8e.//{z}path[@d][@id=""]r5   #z}use)r   textr   r   r   r    etreeElementTree
fromstringlenfindallfindattribvalues)r%   r-   r.   treenswon_idr0   r0   r1   test_unicode_won   s   
$*r   c                  C   s   t jddd d} t  \}}|tdd|  |tdtd |d	d
 t	 }|j
|dd |d	 |  }W d    n1 sMw   Y  | |v rZd|v s\J d S )NrA   	condensed)r^   zfont.stretchzUnlikely to appear by chancez
2019-06-30r5   z
2019-01-01z
2019-12-31r   r?   r   r   )r   r_   updater   r   r   
datetime64rv   rw   r   r   seekreadrO   )rQ   r%   r&   r-   r.   r0   r0   r1   "test_svgnone_with_data_coordinates   s   
r   c                     s  ddl m  ddlm t } | d}|jddgddggdd	 |jg d
g d
dd |j	g ddd |
  | }|g d
g d
 | jddd}|	g dg d
 | jddd}|	ddgddgddg | j  i }t| jddD ]\}}| rd|jj d| }|||< || q}t }	| j|	dd |	  }
W d   n1 sw   Y   fdd}| D ]\}}|||r||
v sJ qdS ) z+Test that object gid appears in output svg.r   )	OffsetBox)Tick   g      ?g       @g      @auto)aspectr5   r?   rr   	myscatter)label)r?   rr   r5   myplot   polar)
projection)r   g      ?rr      3dr5   r?   T)include_selftest123_r   r   Nc                    s   t | rdS t |tr| dkrdS |jd u rdS t |tjrC| \}}t|t|  kr6dkr7dS  t|drA|jd u rCdS t |rd|	 }|dkrRdS |
 }|t|k sb|t|krddS dS )NF r5   axesr   T)
isinstancer   get_textr   r   Line2Dget_datar   hasattrget_locget_view_intervalminmax)gidobjxdataydatar   vir   r   r0   r1   include  s,   



ztest_gid.<locals>.include)matplotlib.offsetboxr   matplotlib.axisr   r   rM   r   rF   r9   rY   legendtwinxbarcanvasdraw	enumeratefindobjget_visible	__class____name__set_gidr   r   r   rO   items)r%   r   ax1ar   r   gdicidxr   r   r-   r.   r   r0   r   r1   test_gid   s@   



r   c                  C   s  t  tddd} }tdD ]}|  }||gg}|| qtddd}|  }|dgg}|| t }| j|dd | }W d    n1 sPw   Y  t	j
j|}d	}	t }
|d
|	 dD ]}|jd }||
vswJ |
| qjt|
dksJ d S )N)r   r   rR   )radiusr>   r5   r   r   r   r   r   z}clipPath[@id]idr?   )r   r   r   r   rF   set_clip_pathr   r   r   r    r   r   r   setr   r   addr   )r%   circleir&   aimginner_circler-   r.   r   r   clip_path_idsnodenode_idr0   r0   r1   test_clip_path_ids_reuse/  s*   


r   c                   C   s   t jt ddd d S )Nsvgztight)r   bbox_inches)r   r   r   r0   r0   r0   r1   test_savefig_tightJ  s   r   c                  C   s   t  \} }|g dg d}|g d t g dg d\}|d t jg dg dddd	\}|d
 t }| j|dd | }dD ]
}d| |v sTJ qJd S )Nr   r   r>   r   )zhttps://example.com/foozhttps://example.com/barN)r?   rr   r   zhttps://example.com/baz)rr   r   r>   rA   r'   )	linestyler|   zhttps://example.com/quuxr   r   )s   foos   bars   bazs   quuxs   https://example.com/)	r   r   r9   set_urlsrY   set_urlr   r   r   )r%   r&   r8   pr*   vr0   r0   r1   rP   P  s   

rP   c                 C   s(  |  dd t \}}|g dg d t|j D ]\}}|d|  qt \}}|g dg d t|j D ]\}}|jd|  |j	d|  qAt
 }|j|dd | }t
 }|j|dd | }tt|j D ]}d| d|v sJ q}||ksJ d S )	NSOURCE_DATE_EPOCH19680801r   r   zhttps://example.com/r   r   ascii)setenvr   r   r9   r   yaxisget_major_ticksr   label1label2r   r   r   r   r   encode)monkeypatchr   r&   r   tickr   b1b2r0   r0   r1   test_url_tickh  s&   r  c              	   C   s  |  dd t \}}t }|j|dd |  }W d    n1 s'w   Y  tj|v s3J d|v s9J d|v s?J d|v sEJ t }|j|dd d d d dd	 |  }W d    n1 sfw   Y  tj|vsrJ d|vsxJ d|vs~J d|vsJ d S )
Nr  r  r   r   
1970-08-16image/svg+xml
StillImageDateCreatorFormatTyper   metadata)	r  r   r   r   r   r   rO   r}   __version__)r  r%   r&   r-   r.   r0   r0   r1   test_svg_default_metadata  s(   
r  c              
   C   s  |  dd tjdddd}d}d}d	}d
}t \}}|D ]j}t }	|j|	d| d id |	 	 }
W d    n1 s@w   Y  t
jj|
}|d| d| d| d\}|D ])}|d| | }||krs|rrJ q^|\}t
jjj|dd}|| |v sJ q^qd S )Nr  r  r  r  r  )creatordater   type{http://www.w3.org/2000/svg}-{http://www.w3.org/1999/02/22-rdf-syntax-ns#} {http://creativecommons.org/ns#}"{http://purl.org/dc/elements/1.1/}r   r  ./	metadata/zRDF/Workunicode)encoding)r  r}   r  r   r   r   r   titler   rO   r    r   r   r   r   tostring)r  metadata_containsSVGNSRDFNSCCNSDCNSr%   r&   namer-   r.   rootworkkeydataxmlstrr0   r0   r1   test_svg_clear_default_metadata  s4    r5  c               	   C   s   t  \} }t }| j|dd d d d dd |  }W d    n1 s'w   Y  d}tjj	|}|
d| dr@J d S )Nr   r  r  r  r#  r  )r   r   r   r   r   rO   r    r   r   r   r   )r%   r&   r-   r.   r+  r0  r0   r0   r1   test_svg_clear_all_metadata  s   
r6  c                     s`  g d} g d}t dddt  ddddddgdd	d
d | D dd |D }t }t }|j|d|d |  }W d    n1 sJw   Y  d}d d}d}tj	j
|}	|	d| d  d\}
dd |	d| dD }||d gksJ  fdd|
d| d| dD }||d gksJ dg| D ]$}|dkrqdd |
d| d| |  D }||| gksJ q|D ]*}|d krqd!d |
d| d| |  d"| d#| d
D }||| ksJ qd$d |
d| d| d%D }|d&gksJ d'd |
d| d| d(  d)  d*	D }||d  ks.J d S )+N)Coverage
IdentifierLanguageRelationSourceTitler  )Contributorr  Keywords	PublisherRightsi     r5   r?   rr   zdescription
text)r  Descriptionc                 S   s   i | ]}|| d qS )z foor0   .0r6   r0   r0   r1   
<dictcomp>  s    z%test_svg_metadata.<locals>.<dictcomp>c                 S   s"   i | ]}|| d | dgqS )z barz bazr0   rC  r0   r0   r1   rE    s   " r   r  r  r   r!  r"  r#  r$  RDFc                 S      g | ]}|j qS r0   r   rD  r   r0   r0   r1   
<listcomp>      z%test_svg_metadata.<locals>.<listcomp>r(  r<  c                    s   g | ]
}|j   d  qS )resource)r   rI  r,  r0   r1   rJ    s    zWork/r  r  rB  c                 S   rG  r0   rH  rI  r0   r0   r1   rJ    s    
r>  c                 S   rG  r0   rH  rI  r0   r0   r1   rJ     s    /zAgent/c                 S   rG  r0   rH  rI  r0   r0   r1   rJ    rK  r  z1968-08-01/1968-08-02T01:02:03c                 S   rG  r0   rH  rI  r0   r0   r1   rJ  
  rK  zsubject/zBag/li)datetimer  r   rM   r   r   r   rO   r    r   r   r   r   lower)single_valuemulti_valuer  r%   r-   r.   r+  r-  r.  r0  rdftitlestypesr6   r   datesr0   rM  r1   test_svg_metadata  sd   
$""rX  zmulti_font_aspath.svgg?c                  C   sh   t jdgd} tt | jdkrtd tjdddgdd tjd	d
d t	 }|
ddd d S )NWenQuanYi Zen Heifamilywqy-zenhei.ttcFont may be missingfontDejaVu Sans   r[  sizer   r   fonttype333333?ffffff?"   There are 几个汉字 in between!)fmFontPropertiesr   findfontr/  pytestskipr   rcrM   r   fpr%   r0   r0   r1   test_multi_font_type3  s   
rp  zmulti_font_astext.svgc                  C   sh   t jdgd} tt | jdkrtd t }tj	ddd tj	dd	dgd
d |
ddd d S )NrY  rZ  r\  r]  r   rA   rc  r^  r_  r`  ra  re  rf  rg  )rh  ri  r   rj  r/  rk  rl  r   rM   rm  r   rn  r0   r0   r1   test_multi_font_type42  s   
rq  zmetadata,error,messager  r5   z,Invalid type for Date metadata. Expected strz1Invalid type for Date metadata. Expected iterabler>  z0Invalid type for Keywords metadata. Expected strz5Invalid type for Keywords metadata. Expected iterabler  z/Invalid type for Creator metadata. Expected strz4Invalid type for Creator metadata. Expected iterabler<  z-Invalid type for Title metadata. Expected strr  z.Invalid type for Format metadata. Expected strFooBarzUnknown metadata keyc              	   C   s   t j||d0 t }t }|j|d| d W d    n1 s"w   Y  W d    d S W d    d S 1 s:w   Y  d S )N)matchr   r  )rk  raisesr   r   rM   r   )r  errormessager-   r%   r0   r0   r1   test_svg_incorrect_metadata)  s   Prx  c                  C   sl   t  } | jddddd t }| j|dd |  }d|v s$J W d    d S 1 s/w   Y  d S )Nr   z<'"&>)r   r   r   z&lt;&apos;&quot;&amp;&gt;")r   rM   r   r   r   r   rO   )r%   r-   r.   r0   r0   r1   test_svg_escapeA  s   "ry  font_str)z7'DejaVu Sans', 'WenQuanYi Zen Hei', 'Arial', sans-serifz='DejaVu Serif', 'WenQuanYi Zen Hei', 'Times New Roman', serifz%'Arial', 'WenQuanYi Zen Hei', cursivez&'Impact', 'WenQuanYi Zen Hei', fantasyzA'DejaVu Sans Mono', 'WenQuanYi Zen Hei', 'Courier New', monospaceinclude_genericFc                 C   s  t jdgd}tt |jdkrtd tdd | d^}}}t	|}|r/||g }|t
jd| < |t
jd	< d
t
jd< t
 \}}|dkrPg d}	n|g}	|	D ]}
|jddd||
gdd |jddd|g||
dd qU|d t }|j|dd | }W d    n1 sw   Y  tjj|}d}d}|d| dD ]+}|d7 }tdd t| d dD }|d | d ksJ |d! | ksJ q|t	|jksJ d S )"NrY  rZ  r\  r]  c                 S   s
   |  dS )N'stripr'   r0   r0   r1   <lambda>]  s   
 z&test_svg_font_string.<locals>.<lambda>z, zfont.z	font.sizerA   r^   
sans-serif)sansr  z
sans serifr   rg  center)r[  har4   offr   r   r   r   r   z}textr5   c                 s   s(    | ]}t d d | dV  qdS )c                 S   s   |   S )Nr}  r  r0   r0   r1   r    s    z0test_svg_font_string.<locals>.<genexpr>.<lambda>:N)mapr~  split)rD  r   r0   r0   r1   	<genexpr>~  s
    
z'test_svg_font_string.<locals>.<genexpr>style;z	font-sizepxzfont-family)rh  ri  r   rj  r/  rk  rl  r  r  r   r   r_   r   r   axisr   r   r   r    r   r   r   r   dictr   texts)rz  r{  ro  explicitrestgenericrb  r%   r&   generic_optionsgeneric_namer-   r.   r   r   
text_counttext_element
font_styler0   r0   r1   test_svg_font_stringJ  sN   








r  c            	      C   s   t  } |  }td}d}t|dd}||j_t||ddddt	d	d
dd}|
d || t }| j|dd | d}W d    n1 sNw   Y  d}||v s[J d S )N)    r  )g333333?g?r4   )zoom)g      ^@g      Tr3  zoffset pointsr   z->zangle,angleA=0,angleB=90,rad=3)
arrowstyleconnectionstyle)xyboxxycoords	boxcoordspad
arrowpropsza test for issue 20044r   r   zutf-8z<g id="a test for issue 20044">)r   rM   r   r   onesr   r   r   r   r  r   r   r   r   r   rO   )	r%   r&   arr_imgxyimageboxabr-   r.   rQ   r0   r0   r1   test_annotationbbox_gid  s0   

	
r  c                  C   s$  t  \} }|g dg d | j  t }| j|dd |  }W d   n1 s0w   Y  t	j
j|}t jd du sEJ |drLJ d}t jd|d	 t }| j|dd |  }W d   n1 spw   Y  t	j
j|}t jd |ksJ |d
| dsJ dS )z=Test that `svg.id` rcparam appears in output svg if not None.r   )rr   r?   r5   r   r   Nzsvg.idz.[@id]za test for issue 28535)r   z.[@id="r   )r   r   rY   r   r   r   r   r   rO   r    r   r   r   r_   r   rm  )r%   r&   r-   r.   r   svg_idr0   r0   r1   
test_svgid  s&   
r  )BrP  ior   pathlibr   xml.etree.ElementTreer    xml.parsers.expatrk  numpyr   
matplotlibr}   matplotlib.figurer   matplotlib.patchesr   matplotlib.textr   matplotlib.pyplotpyplotr   matplotlib.testing.decoratorsr   r   matplotlib.testing._markersr	   r
   rh  r   r   r   r2   r;   rJ   rK   r]   r`   rq   rx   r   r   r  contextr   r   r   r   r   rP   r  r  r5  r6  rX  rp  rq  markparametrize	TypeError
ValueErrorrx  ry  r  r  r  r0   r0   r0   r1   <module>   s    



	



:?"!9





	1