o
    8Va\                     @   s  d dl Z d dlmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ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 m!Z!m"Z" d dlm#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d d	l*m+Z+m,Z,m-Z- d d
l.m/Z0 e#  edde1fdZ2G dd de)Z3G dd de)Z4dd Z5dd Z6dd Z7dd Z8dd Z9dd Z:dd Z;d d! Z<d"d# Z=d$d% Z>d&d' Z?d(d) Z@d*d+ ZAd,d- ZBd.d/ ZCd0d1 ZDd2d3 ZEd4d5 ZFd6d7 ZGd8d9 ZHd:d; ZId<d= ZJdS )>    N)TemporaryDirectory)pisincosSymbolIntegralSumsqrtlogexpNeooLambertWImeijerg	exp_polar	PiecewiseAnd	real_root)S)sympify)import_module)Plotplotplot_parametricplot3d_parametric_lineplot3dplot3d_parametric_surface)
unset_showplot_contourPlotGridDefaultBackendMatplotlibBackendTextBackendBaseBackend)skipraiseswarns)lambdify
matplotlibz1.1.0)Zmin_module_versionZcatchc                   @   s   e Zd ZdZdS )DummyBackendNotOkz Used to verify if users can create their own backends.
    This backend is meant to raise NotImplementedError for methods `show`,
    `save`, `close`.
    N)__name__
__module____qualname____doc__ r/   r/   @/usr/lib/python3/dist-packages/sympy/plotting/tests/test_plot.pyr*      s    r*   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	DummyBackendOkzi Used to verify if users can create their own backends.
    This backend is meant to pass all tests.
    c                 C      d S Nr/   selfr/   r/   r0   show'      zDummyBackendOk.showc                 C   r2   r3   r/   r4   r/   r/   r0   save*   r7   zDummyBackendOk.savec                 C   r2   r3   r/   r4   r/   r/   r0   close-   r7   zDummyBackendOk.closeN)r+   r,   r-   r.   r6   r8   r9   r/   r/   r/   r0   r1   #   s
    r1   c               	      sp  t std td tdtdd} t ddd}t t   t  d	d
}|| dd |d _d|d _d|_	d|_
d|d _d|_d|_d|_d}|tj| | |j  |t d  |t d  d d  d}|tj| | t d  ddf|d< d}|tj| | |j  tt  dt dt f}d}|tj| | |j  tt }d}|tj| | |j  t d  ddff d  d dff}d!}|tj| | |j  tt fd"d ttd dkfd# d$df}d%}|tj| | |j  tt  dk f d df d df}d&}|tj| | |j  t }td}|| d'}|tj| | |j  td$ d$k f td$ k dk f d td k dk f d  dkf}t| d df}d(}|tj| | |j  W d    d S 1 sw   Y  d S ))N"Matplotlib not the default backendxysympy_prefixTf1legendlabelf2)rC   c                 S      | S r3   r/   ar/   r/   r0   <lambda>?       z&test_plot_and_save_1.<locals>.<lambda>r   b   z	Big titlez
the x axiszstraight linerK   rK   )i   z!test_basic_options_and_colors.png      ztest_plot_extend_append.pngztest_plot_setitem.png   ztest_line_explicit.pngztest_line_default_range.png   ztest_line_multiple_range.pngc                      s
   t  S r3   )r   r/   r;   r<   r/   r0   rH   d   s   
 r   Tztest_plot_piecewise.pngztest_plot_piecewise_2.pngztest_horizontal_line.pngztest_plot_piecewise_3.png)r)   r%   r   r   r   r   r   extend
line_colortitleZxlabelrC   rB   aspect_ratioxlimr8   ospathjoin_backendr9   appendr   r&   
ValueErrorr   r   )tmpdirpfilenamep1p2fr/   rU   r0   test_plot_and_save_11   s|   






&

&


 &$ri   c               
   C   s   t std td} td}td}tddm}tt| t| }d}|tj	
|| |j  tt| t| | dd	fd
dd}d}|tj	
|| |j  tt| t| f| t| f}d}|tj	
|| |j  tt| t| | ddff| t| | dd	ff}d}|tj	
|| |j  t| t| dd}d}|tj	
|| |j  tt| t| ddd}d}|tj	
|| |j  tt| t| | d
dd}d}|tj	
|| |j  tt| t| | | dd	fft| t| | | ddff}d}|tj	
|| |j  tt| t| | dd}d}|tj	
|| |j  t| | }d}|tj	
|| |j  t|  | | | | dd	f}d }|tj	
|| |j  t| | | ddf|ddff|  | | ddf|ddff}d!}|tj	
|| |j  tt| | t| | | | }d"}|tj	
|| |j  t| t| | t| || dd	f|dd	fft| | t| | | | | dd	f|dd	ff}d"}|tj	
|| |j  tt| t| | dd	f|dd	f}d#}|tj	
|| |j  t| d$ |d$  | d |d  | dd	f|dd	f}d#}|tj	
|| |j  t| d$ |d$  | dd	f|dd	ff| d |d  | ddf|ddff}d#}|tj	
|| |j  W d    d S 1 sw   Y  d S )%Nr:   r;   r<   zr=   r>   ztest_parametric.pngrR   rS   TZparametric_plotrA   ztest_parametric_range.pngztest_parametric_multiple.pngrT   rN   z#test_parametric_multiple_ranges.png   )depthztest_recursion_depth.pngF  )adaptivenb_of_pointsztest_adaptive.pngZ3d_parametric_plotztest_3d_line.pngztest_3d_line_multiple.png   )ro   ztest_3d_line_points.pngztest_surface.pngztest_surface_multiple.pngz test_surface_multiple_ranges.pngztest_parametric_surface.pngztest_contour_plot.pngrO   )r)   r%   r   r   r   r   r   r8   r]   r^   r_   r`   r9   r   r   r   r   r;   r<   rj   rc   rd   re   r/   r/   r0   test_plot_and_save_2   s   


(



0



2
 
(,
$
2
  $rr   c               	   C   s  t std td} td}td}tdd}tt| }dd |d	 _d
}|tj	
|| dd |d	 _d}|tj	
|| |j  t| t|  | t|  | d	df}dd |d	 _d}|tj	
|| dd |d	 _d}|tj	
|| dd |d	 _d}|tj	
|| |j  tt| dt|  td|    t| dt|  td|    dtd|   | d	dt f}t| td|  |d	 _d}|tj	
|| dd |d	 _d}|tj	
|| dd |d	 _d}|tj	
|| |j  tt| | | d	dt f|ddf}dd |d	 _d }|tj	
|| d!d |d	 _d"}|tj	
|| d#d |d	 _d$}|tj	
|| t| ||ft| d%t  d |d  |d	 _d&}|tj	
|| |j  t| td|  | td|  || d'd(f|d'd(f}d)d |d	 _d*}|tj	
|| d+d |d	 _d,}|tj	
|| t| ||ft| d |d  |d  |d	 _d-}|tj	
|| |j  W d    d S 1 sw   Y  d S ).Nr:   r;   r<   rj   r=   r>   c                 S   rE   r3   r/   rF   r/   r/   r0   rH     rI   z&test_plot_and_save_3.<locals>.<lambda>r   ztest_colors_line_arity1.pngc                 S      |S r3   r/   rG   rJ   r/   r/   r0   rH     rI   ztest_colors_line_arity2.png
   c                 S   rE   r3   r/   rF   r/   r/   r0   rH     rI   z!test_colors_param_line_arity1.pngc                 S   rE   r3   r/   rt   r/   r/   r0   rH     rI   c                 S   rs   r3   r/   rt   r/   r/   r0   rH     rI   z"test_colors_param_line_arity2b.pngg?   rO   rQ   ztest_colors_3d_line_arity1.pngc                 S   rs   r3   r/   rt   r/   r/   r0   rH   &  rI   ztest_colors_3d_line_arity2.pngc                 S      |S r3   r/   rG   rJ   cr/   r/   r0   rH   )  rI   ztest_colors_3d_line_arity3.png   rR   rS   c                 S   rE   r3   r/   rF   r/   r/   r0   rH   /  rI   ztest_colors_surface_arity1.pngc                 S   rs   r3   r/   rt   r/   r/   r0   rH   2  rI   ztest_colors_surface_arity2.pngc                 S   rw   r3   r/   rx   r/   r/   r0   rH   5  rI   ztest_colors_surface_arity3a.pngrN   ztest_colors_surface_arity3b.pngrW   rK   c                 S   rE   r3   r/   rF   r/   r/   r0   rH   ?  rI   z!test_colors_param_surf_arity1.pngc                 S   s   | | S r3   r/   rt   r/   r/   r0   rH   B  s    z!test_colors_param_surf_arity2.pngz!test_colors_param_surf_arity3.png)r)   r%   r   r   r   r   rY   r8   r]   r^   r_   r`   r9   r   r   r   	lambdify_r   surface_colorr	   r   rq   r/   r/   r0   test_plot_and_save_3   s   
"
 
$.
 .$r}   c               	   C   s   t std td} td}tddX}ttdd9 ttt| d d	 t	| d d	  | d
|f}t
||d	df}d}|tj|| |j  W d    n1 sVw   Y  W d    d S W d    d S 1 snw   Y  d S )Nr:   r;   r<   r=   r>   z/The evaluation of the expression is problematic)matchrO   rK   r   rS   ztest_advanced_integral.png)r)   r%   r   r   r'   UserWarningr   r
   r   r	   r   r8   r]   r^   r_   r`   r9   )r;   r<   rc   ird   re   r/   r/   r0   test_plot_and_save_4K  s$   0"r   c                  C   s   t std td} td}tdd[}td| |  | dtf}t||ddf}d	}|tj	
|| |j  ttd|  | d|f|ddfd
d}d|d _d|d _d}|tj	
|| |j  W d    d S 1 sqw   Y  d S )Nr:   r;   r<   r=   r>   rK   rO   ru   ztest_advanced_inf_sum.pngFr6   Tr   ztest_advanced_fin_sum.png)r)   r%   r   r   r   r   r   r8   r]   r^   r_   r`   r9   Zonly_integersZsteps)r;   r<   rc   srd   re   r/   r/   r0   test_plot_and_save_5f  s"   
$

"r   c            	      C   sd  t std td} tdd}d}tt| tt|   }|t	j
|| ttt|  }|t	j
|| tt| }|t	j
|| ttt| }|t	j
|| d| d  tt t  d }tdd	|}d| d  ttt  d }tdd	|}|| d
t  }t|| ddf}|t	j
|| W d    d S 1 sw   Y  d S )Nr:   r;   r=   r>   ztest.pngrS   rO   ))      ?r/   ))rS   r   r   r/   0   gư>{Gz?)r)   r%   r   r   r   r   r   r   r8   r]   r^   r_   r	   r   r   r   r   )	r;   rc   re   rd   Zx1Zm1Zx2Zm2exprr/   r/   r0   test_plot_and_save_6|  s*   "r   c                  C   s  t std td} td}tdd}t| }tt| t| f| t| fdd}tt| t| dddd	}tt| t| | dd}t	d
d
||||}d}|
tj|| |j  t	dd||||}d}|
tj|| |j  tt| | t tfdd}	dd |	d _ttd| dkfd| ddfdd}
t| d
 |d
  | ddf|ddff| d |d  | ddf|ddffdd}t	dd|	|
|}d}|
tj|| |j  W d    d S 1 sw   Y  d S )Nr:   r;   r<   r=   r>   Fr   rm   )rn   ro   r6   rO   ztest_grid1.pngrN   rQ   ztest_grid2.pngc                 S   rE   r3   r/   rF   r/   r/   r0   rH     rI   z(test_plotgrid_and_save.<locals>.<lambda>r   rK   rV   rW   rR   rS   rT   ztest_grid3.png)r)   r%   r   r   r   r   r   r   r   r    r8   r]   r^   r_   r`   r9   r   rY   r   r   )r;   r<   rc   rf   rg   p3p4rd   re   Zp5Zp6Zp7r/   r/   r0   test_plotgrid_and_save  s>   "

" ""r   c                  C   s   t std td} t| }t| d }t| d  ||d  t|jdks*J tt || W d    n1 s>w   Y  tt ||j W d    d S 1 sYw   Y  d S )Nr:   r;   rO   r   )	r)   r%   r   r   ra   lenZ_seriesr&   	TypeError)r;   rf   rg   r/   r/   r0   test_append_issue_7140  s   

"r   c                     s   t std td} t|  t tj tjfdd}|j  t dtj tjfd}|j  t dt	dt	dfd}|j  t t	dt	dfdd}|j  t
t fdd t
t fd	d t
t fd
d t
t fdd d S )Nr:   r;   rW   rK   r\   Zylimz-3.14z3.14c                      s   t  tj dfddS NrK   r   r   r   r   ZImaginaryUnitr/   Zeqnr/   r0   rH     s    z"test_issue_15265.<locals>.<lambda>c                         t  ddtjfdS Nr   rW   r   r   r/   r   r/   r0   rH         c                      s   t  tjdfddS r   )r   r   ZNegativeInfinityr/   r   r/   r0   rH     r   c                      r   r   )r   r   ZInfinityr/   r   r/   r0   rH     r   )r)   r%   r   r   r   r   ZPir`   r9   r   r&   rb   r;   rd   r/   r   r0   test_issue_15265  s0   







r   c                  C   s$   t std t  t } |   d S )Nr:   )r)   r%   r   r   r6   )rd   r/   r/   r0   test_empty_Plot  s
   r   c                  C   sd   t std td} | d d| d   | d  }t|| ddfdd	}t|d
  d
 dks0J d S )Nr:   r;   g333333?ru   rN   rO   Fr   r   rp   )r)   r%   r   r   r   get_data)r;   rh   rd   r/   r/   r0   test_issue_17405  s    r   c                  C   sn   t std td} t| | ddfddd}t|d  d d	ks#J |d jd
ks,J |d jdks5J d S )Nr:   r;   gMbP?d   r
   F)Zxscaler6   r   rp   g      Y@)r)   r%   r   r   r   r   endstartr   r/   r/   r0   test_logplot_PR_16796  s   r   c                  C   sD   t std td} tt| dd}t|d  d dks J d S )Nr:   r;   Fr   r   rp   )r)   r%   r   r   r   r   r   r   r/   r/   r0   test_issue_16572  s
    r   c                  C   s   t std tddd} tt ttt |   |  ttt t |   |   t| dfdt df}t|dd}t	|d 
 d d	ksFJ d S )
Nr:   kT)Zintegerr   rO   Fr   rp   )r)   r%   r   r   r   r   r   r   r   r   r   )r   rh   rd   r/   r/   r0   test_issue_11865#  s   L r   c                  C   sR   t std td} ttt| | d  ddd}t|d  d dks'J d S )	Nr:   r;   rO   rN   Fr   r   rp   )r)   r%   r   r   r   r
   r   r   r   r/   r/   r0   test_issue_114610  s
    r   c                  C   sb   t std td} tt| t| | ddt fddd}|jdk t|d 	 d dks/J d S )	Nr:   r;   r   rO   rL   F)r[   r6   rp   )
r)   r%   r   r   r   r   r   r[   r   r   r   r/   r/   r0   test_issue_11764<  s   $
 r   c                  C   s  t std td} tt| ddd}|jtksJ t|d  d dks(J tt| ddd}|jt	ks8J t|d  d dksFJ tt| d	dd}|jt
ksVJ t|d  d dksdJ tt| dd
}|jt
kssJ t|d  d dksJ d S )Nr:   r;   r)   Fbackendr6   r   rp   textdefaultr   )r)   r%   r   r   r   r   r"   r   r   r#   r!   )r;   Zpmptpdrd   r/   r/   r0   test_issue_13516H  s    r   c                  C   s   t std td} t| | d | ddf}|j}|jd  \}}t|d dk s+J t|d dk s5J |jd  \}}t|d dk sHJ t|d dk sRJ d S )Nr:   r;   rO   r   ru   r   r   )	r)   r%   r   r   r`   axget_xlimabsget_ylim)r;   rd   r   xminxmaxyminymaxr/   r/   r0   test_plot_limits_  s   r   c                  C   s  t std td} dt|  dt|  d|  | ddff}t| t| | | ddff}t||}|j}|jd  \}}t	|d dk sEJ t	|d dk sOJ |jd 
 \}}t	|d dk sbJ t	|d dk slJ |jd  \}	}
t	|	d dk sJ t	|
d dk sJ t||}|j}|jd  \}}t	|d dk sJ t	|d dk sJ |jd 
 \}}t	|d dk sJ t	|d dk sJ |jd  \}	}
t	|	d dk sJ t	|
d dk sJ d S )	Nr:   r;   rO   rR   rS   r   r   ru   )r)   r%   r   r   r   r   r`   r   r   r   r   Zget_zlim)r;   Zv1Zv2rd   r   r   r   r   r   ZzminZzmaxr/   r/   r0   "test_plot3d_parametric_line_limitso  s6   &

r   c                  C   s  t std td} tt| ddd}|jj }|d dkr%|d d	ks'J tt| dd
d}|jj }|d dkrB|d dksDJ tdd||dd}|jj }|d dkr_|d dksaJ t	t
 tt| ddd W d    d S 1 szw   Y  d S )Nr:   r;   r)   )   rQ   )r   sizer   r   rK   rQ   )rS   ru   rS   ru   rO   )rz   rO   )r   rz   )rW   rN   )r)   r%   r   r   r   r`   ZfigZget_size_inchesr    r&   rb   )r;   rf   s1rg   s2r   Zs3r/   r/   r0   test_plot_size  s   
"r   c                  C   s  t std td} tt tt| tdd W d    n1 s"w   Y  tt| tdd}|j	tks7J t
|d  d dksEJ tt| tdd}|j	tksUJ t
|d  d dkscJ tt| tdd}|j	tkssJ t
|d  d dksJ tt |  W d    n1 sw   Y  tt |d W d    n1 sw   Y  tt |j  W d    d S 1 sw   Y  d S )Nr:   r;   Fr   r   rp   z	test/path)r)   r%   r   r&   r   r   r   r   r"   r   r   r   r1   r*   NotImplementedErrorr6   r8   r`   r9   )r;   rg   r   r   r/   r/   r0   test_issue_20113  s0   




"r   c                  C   s  t d} t d}tt| dd d tt| dd tt| dd tt| t| dd d tt| t| dd tt| t| dd tt| t| | d	d d tt| t| | dd tt| t| | dd tt| | t| | | | | d
df|d
dfdd d tt| | t| | | | | d
df|d
dfdd tt| | t| | | | | d
df|d
dfdd t| | | d
df|d
dfdd d t| | | d
df|d
dfdd t| | | d
df|d
dfdd d S )Nr;   r<   c                 S   rE   r3   r/   rF   r/   r/   r0   rH     rI   z&test_custom_coloring.<locals>.<lambda>)rY   rK   rc                 S   rE   r3   r/   rF   r/   r/   r0   rH     rI   c                 S   rE   r3   r/   rF   r/   r/   r0   rH     rI   rR   rS   c                 S      | d |d  S NrO   r/   rt   r/   r/   r0   rH         )r|   c                 S   r   r   r/   rt   r/   r/   r0   rH     r   )r   r   r   r   r   r   r   r   rU   r/   r/   r0   test_custom_coloring  s8    $r   )Kr]   Ztempfiler   Zsympyr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Zsympy.core.singletonr   Zsympy.core.sympifyr   Zsympy.externalr   Zsympy.plotting.plotr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   Zsympy.testing.pytestr%   r&   r'   Zsympy.utilitiesr(   r{   RuntimeErrorr)   r*   r1   ri   rr   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r/   r/   r0   <module>   sL    P $QxQ& 
"