o
    *ήctb                     @   s>  d dl Z d dlmZ d dlmZ d dlmZmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZ d dlmZ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 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/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z; d dl<m=Z= e-  e%dde>fdZ?G dd de3Z@G dd de3ZAdd ZBdd  ZCd!d" ZDd#d$ ZEd%d& ZFd'd( ZGd)d* ZHd+d, ZId-d. ZJd/d0 ZKd1d2 ZLd3d4 ZMd5d6 ZNd7d8 ZOd9d: ZPd;d< ZQd=d> ZRd?d@ ZSdAdB ZTdCdD ZUdEdF ZVdGdH ZWdIdJ ZXdS )K    N)TemporaryDirectory)Sum)Ioopi)Ne)Symbol)LambertWexp	exp_polarlog)	real_rootsqrt)	Piecewise)cossin)meijerg)Integral)And)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warns_deprecated_sympy)lambdify)ignore_warnings
matplotlibz1.1.0)min_module_version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__ r3   r3   E/tmp/pip-target-vg8gfxp4/lib/python/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 Nr3   selfr3   r3   r4   show0      zDummyBackendOk.showc                 C   r6   r7   r3   r8   r3   r3   r4   save3   r;   zDummyBackendOk.savec                 C   r6   r7   r3   r8   r3   r3   r4   close6   r;   zDummyBackendOk.closeN)r/   r0   r1   r2   r:   r<   r=   r3   r3   r3   r4   r5   ,   s
    r5   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)rG   c                 S      | S r7   r3   ar3   r3   r4   <lambda>H       z&test_plot_and_save_1.<locals>.<lambda>r   b   z	Big titlez
the x axiszstraight linerO   rO   )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 r7   )r   r3   r?   r@   r3   r4   rL   m   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titlexlabelrG   rF   aspect_ratioxlimr<   ospathjoin_backendr=   appendr   r&   
ValueErrorr   r   )tmpdirpfilenamep1p2fr3   rY   r4   test_plot_and_save_1:   s|   






&

&


 &$rn   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@   zrA   rB   ztest_parametric.pngrV   rW   Tparametric_plotrE   ztest_parametric_range.pngztest_parametric_multiple.pngrX   rR   z#test_parametric_multiple_ranges.png   )depthztest_recursion_depth.pngF  )adaptivenb_of_pointsztest_adaptive.png3d_parametric_plotztest_3d_line.pngztest_3d_line_multiple.png   )ru   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.pngrS   )r+   r%   r   r   r   r   r   r<   rb   rc   rd   re   r=   r   r   r   r   r?   r@   ro   rh   ri   rj   r3   r3   r4   test_plot_and_save_2   s   


(



0



2
 
(,
$
2
  $ry   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@   ro   rA   rB   c                 S   rI   r7   r3   rJ   r3   r3   r4   rL     rM   z&test_plot_and_save_3.<locals>.<lambda>r   ztest_colors_line_arity1.pngc                 S      |S r7   r3   rK   rN   r3   r3   r4   rL     rM   ztest_colors_line_arity2.png
   c                 S   rI   r7   r3   rJ   r3   r3   r4   rL     rM   z!test_colors_param_line_arity1.pngc                 S   rI   r7   r3   r{   r3   r3   r4   rL     rM   c                 S   rz   r7   r3   r{   r3   r3   r4   rL   #  rM   z"test_colors_param_line_arity2b.pngg?   rS   rU   ztest_colors_3d_line_arity1.pngc                 S   rz   r7   r3   r{   r3   r3   r4   rL   /  rM   ztest_colors_3d_line_arity2.pngc                 S      |S r7   r3   rK   rN   cr3   r3   r4   rL   2  rM   ztest_colors_3d_line_arity3.png   rV   rW   c                 S   rI   r7   r3   rJ   r3   r3   r4   rL   8  rM   ztest_colors_surface_arity1.pngc                 S   rz   r7   r3   r{   r3   r3   r4   rL   ;  rM   ztest_colors_surface_arity2.pngc                 S   r~   r7   r3   r   r3   r3   r4   rL   >  rM   ztest_colors_surface_arity3a.pngrR   ztest_colors_surface_arity3b.pngr[   rO   c                 S   rI   r7   r3   rJ   r3   r3   r4   rL   H  rM   z!test_colors_param_surf_arity1.pngc                 S   s   | | S r7   r3   r{   r3   r3   r4   rL   K  s    z!test_colors_param_surf_arity2.pngz!test_colors_param_surf_arity3.png)r+   r%   r   r   r   r   r]   r<   rb   rc   rd   re   r=   r   r   r   	lambdify_r   surface_colorr   r   rx   r3   r3   r4   test_plot_and_save_3  s   
"
 
$.
 .$r   c               	   C   s   t std td} td}tddY}ttd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 sWw   Y  W d    d S W d    d S 1 sow   Y  d S )Nr>   r?   r@   rA   rB   z/The evaluation of the expression is problematicF)matchtest_stacklevelrS   rO   r   rW   ztest_advanced_integral.png)r+   r%   r   r   r'   UserWarningr   r   r   r   r   r<   rb   rc   rd   re   r=   )r?   r@   rh   iri   rj   r3   r3   r4   test_plot_and_save_4T  s&   0"r   c               	   C   s  t std td} td}tddo}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t |tj	
|| W d    n1 spw   Y  |j  W d    d S 1 sw   Y  d S )Nr>   r?   r@   rA   rB   rO   rS   r|   ztest_advanced_inf_sum.pngFr:   Tr   ztest_advanced_fin_sum.png)r+   r%   r   r   r   r   r   r<   rb   rc   rd   re   r=   only_integersstepsr*   r   )r?   r@   rh   sri   rj   r3   r3   r4   test_plot_and_save_5q  s&   
$


	"r   c            	   	   C   s  t std td} tdd}d}tt| tt|   }|t	j
|| tt ttt|  }|t	j
|| W d    n1 sJw   Y  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?   rA   rB   ztest.pngrW   rS   ))      ?r3   ))rW   r   r   r3   0   gư>{Gz?)r+   r%   r   r   r   r   r   r   r<   rb   rc   rd   r*   RuntimeWarningr   r	   r   r   r   )	r?   rh   rj   ri   x1m1x2m2exprr3   r3   r4   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@   rA   rB   Fr   rs   )rt   ru   r:   rS   ztest_grid1.pngrR   rU   ztest_grid2.pngc                 S   rI   r7   r3   rJ   r3   r3   r4   rL     rM   z(test_plotgrid_and_save.<locals>.<lambda>r   rO   rZ   r[   rV   rW   rX   ztest_grid3.png)r+   r%   r   r   r   r   r   r   r   r    r<   rb   rc   rd   re   r=   r   r]   r   r   )r?   r@   rh   rk   rl   p3p4ri   rj   p5p6p7r3   r3   r4   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?   rS   r   )	r+   r%   r   r   rf   len_seriesr&   	TypeError)r?   rk   rl   r3   r3   r4   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?   r[   rO   ra   ylimz-3.14z3.14c                      s   t  tj dfddS NrO   r   r   r   r   ImaginaryUnitr3   eqnr3   r4   rL     s    z"test_issue_15265.<locals>.<lambda>c                         t  ddtjfdS Nr   r[   r   r   r3   r   r3   r4   rL         c                      s   t  tjdfddS r   )r   r   NegativeInfinityr3   r   r3   r4   rL     r   c                      r   r   )r   r   Infinityr3   r   r3   r4   rL   
  r   )r+   r%   r   r   r   r   Pire   r=   r   r&   rg   r?   ri   r3   r   r4   test_issue_15265  s0   







r   c                  C   s$   t std t  t } |   d S )Nr>   )r+   r%   r   r   r:   )ri   r3   r3   r4   test_empty_Plot  s
   r   c                  C   s   t std td} | d d| d   | d  }t|| ddfdd	}tt t|d
  d
 dks5J W d    d S 1 s@w   Y  d S )Nr>   r?   g333333?r|   rR   rS   Fr   r   rw   )r+   r%   r   r   r*   r   r   get_datar?   rm   ri   r3   r3   r4   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)xscaler:   r   rw   g      Y@)r+   r%   r   r   r   r   endstartr   r3   r3   r4   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   rw   )r+   r%   r   r   r	   r   r   r   r3   r3   r4   test_issue_165723  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)integerr   rS   Fr   rw   )r+   r%   r   r   r   r
   r   r   r   r   r   )r   rm   ri   r3   r3   r4   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?   rS   rR   Fr   r   rw   )r+   r%   r   r   r   r   r   r   r   r3   r3   r4   test_issue_11461K  s
    r   c                  C   sf   t std td} tt| t| | ddt fddd}|jdks#J t|d 	 d dks1J d S )	Nr>   r?   r   rS   rP   F)r`   r:   rw   )
r+   r%   r   r   r   r   r   r`   r   r   r   r3   r3   r4   test_issue_11764W  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backendr:   r   rw   textdefaultr   )r+   r%   r   r   r   r   r"   r   r   r#   r!   )r?   pmptpdri   r3   r3   r4   test_issue_13516c  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?   rS   r   r|   r   r   )	r+   r%   r   r   re   axget_xlimabsget_ylim)r?   ri   r   xminxmaxyminymaxr3   r3   r4   test_plot_limitsz  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?   rS   rV   rW   r   r   r|   )r+   r%   r   r   r   r   re   r   r   r   r   get_zlim)r?   v1v2ri   r   r   r   r   r   zminzmaxr3   r3   r4   "test_plot3d_parametric_line_limits  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+   )   rU   )r   sizer   r   rO   rU   )rW   r|   rW   r|   rS   )r   rS   )r   r   )r[   rR   )r+   r%   r   r   r   re   figget_size_inchesr    r&   rg   )r?   rk   s1rl   s2r   s3r3   r3   r4   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   rw   z	test/path)r+   r%   r   r&   r   r   r   r   r"   r   r   r   r5   r.   NotImplementedErrorr:   r<   re   r=   )r?   rl   r   r   r3   r3   r4   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   rI   r7   r3   rJ   r3   r3   r4   rL     rM   z&test_custom_coloring.<locals>.<lambda>)r]   rO   rc                 S   rI   r7   r3   rJ   r3   r3   r4   rL     rM   c                 S   rI   r7   r3   rJ   r3   r3   r4   rL     rM   rV   rW   c                 S      | d |d  S NrS   r3   r{   r3   r3   r4   rL         )r   c                 S   r   r   r3   r{   r3   r3   r4   rL     r   )r   r   r   r   r   r   r   r   rY   r3   r3   r4   test_custom_coloring  s8    $r   c                  C   sh   t std td} t| }t|| ddfdd}t  |d   W d    d S 1 s-w   Y  d S )Nr>   r?   r   r|   Fr   r   )r+   r%   r   r   r   r(   get_segmentsr   r3   r3   r4   test_deprecated_get_segments  s   "r   )Yrb   tempfiler   sympy.concrete.summationsr   sympy.core.numbersr   r   r   sympy.core.relationalr   sympy.core.symbolr   &sympy.functions.elementary.exponentialr	   r
   r   r   (sympy.functions.elementary.miscellaneousr   r   $sympy.functions.elementary.piecewiser   (sympy.functions.elementary.trigonometricr   r   sympy.functions.special.hyperr   sympy.integrals.integralsr   sympy.logic.boolalgr   sympy.core.singletonr   sympy.core.sympifyr   sympy.externalr   sympy.plotting.plotr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   sympy.testing.pytestr%   r&   r'   r(   sympy.utilitiesr)   r   sympy.utilities.exceptionsr*   RuntimeErrorr+   r.   r5   rn   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r3   r3   r4   <module>   sd     $QxQ "& 
"