a
    <b_                     @   s2  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; e-  e%dde<fdZ=G dd de3Z>G dd de3Z?dd Z@dd ZAd d! ZBd"d# ZCd$d% ZDd&d' ZEd(d) ZFd*d+ ZGd,d- ZHd.d/ ZId0d1 ZJd2d3 ZKd4d5 ZLd6d7 ZMd8d9 ZNd:d; ZOd<d= ZPd>d? ZQd@dA ZRdBdC ZSdDdE ZTdFdG ZUdHdI ZVdS )J    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
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__ r0   r0   n/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-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   s   d S Nr0   selfr0   r0   r1   show/   s    zDummyBackendOk.showc                 C   s   d S r3   r0   r4   r0   r0   r1   save2   s    zDummyBackendOk.savec                 C   s   d S r3   r0   r4   r0   r0   r1   close5   s    zDummyBackendOk.closeN)r,   r-   r.   r/   r6   r7   r8   r0   r0   r0   r1   r2   +   s   r2   c               	      sn  t std td tdtdd0} 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    n1 s`0    Y  d S ))N"Matplotlib not the default backendxysympy_prefixTf1legendlabelf2)rB   c                 S   s   | S r3   r0   ar0   r0   r1   <lambda>G       z&test_plot_and_save_1.<locals>.<lambda>r   b   z	Big titlez
the x axiszstraight linerI   rI   )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   r0   r:   r;   r0   r1   rF   l   rG   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xlabelrB   rA   aspect_ratioxlimr7   ospathjoin_backendr8   appendr   r&   
ValueErrorr   r   )tmpdirpfilenamep1p2fr0   rS   r1   test_plot_and_save_19   sz    






&

&


 &rg   c               
   C   s  t std td} td}td}tdd}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    n1 s0    Y  d S )%Nr9   r:   r;   zr<   r=   ztest_parametric.pngrP   rQ   TZparametric_plotr@   ztest_parametric_range.pngztest_parametric_multiple.pngrR   rL   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   )rm   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.pngrM   )r*   r%   r   r   r   r   r   r7   r[   r\   r]   r^   r8   r   r   r   r   r:   r;   rh   ra   rb   rc   r0   r0   r1   test_plot_and_save_2   s    


(



0



2
 
(,
$
2
  rp   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    n1 s0    Y  d S ).Nr9   r:   r;   rh   r<   r=   c                 S   s   | S r3   r0   rD   r0   r0   r1   rF     rG   z&test_plot_and_save_3.<locals>.<lambda>r   ztest_colors_line_arity1.pngc                 S   s   |S r3   r0   rE   rH   r0   r0   r1   rF     rG   ztest_colors_line_arity2.png
   c                 S   s   | S r3   r0   rD   r0   r0   r1   rF     rG   z!test_colors_param_line_arity1.pngc                 S   s   | S r3   r0   rq   r0   r0   r1   rF     rG   c                 S   s   |S r3   r0   rq   r0   r0   r1   rF   "  rG   z"test_colors_param_line_arity2b.pngg?   rM   rO   ztest_colors_3d_line_arity1.pngc                 S   s   |S r3   r0   rq   r0   r0   r1   rF   .  rG   ztest_colors_3d_line_arity2.pngc                 S   s   |S r3   r0   rE   rH   cr0   r0   r1   rF   1  rG   ztest_colors_3d_line_arity3.png   rP   rQ   c                 S   s   | S r3   r0   rD   r0   r0   r1   rF   7  rG   ztest_colors_surface_arity1.pngc                 S   s   |S r3   r0   rq   r0   r0   r1   rF   :  rG   ztest_colors_surface_arity2.pngc                 S   s   |S r3   r0   rt   r0   r0   r1   rF   =  rG   ztest_colors_surface_arity3a.pngrL   ztest_colors_surface_arity3b.pngrU   rI   c                 S   s   | S r3   r0   rD   r0   r0   r1   rF   G  rG   z!test_colors_param_surf_arity1.pngc                 S   s   | | S r3   r0   rq   r0   r0   r1   rF   J  rG   z!test_colors_param_surf_arity2.pngz!test_colors_param_surf_arity3.png)r*   r%   r   r   r   r   rW   r7   r[   r\   r]   r^   r8   r   r   r   	lambdify_r   surface_colorr   r   ro   r0   r0   r1   test_plot_and_save_3  s    
"
 
$.
 .ry   c               	   C   s   t std td} td}tdd}ttdddr ttt| d	 d
 t	| d	 d
  | d|f}t
||d
df}d}|tj|| |j  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr9   r:   r;   r<   r=   z/The evaluation of the expression is problematicF)matchZtest_stacklevelrM   rI   r   rQ   ztest_advanced_integral.png)r*   r%   r   r   r'   UserWarningr   r   r   r   r   r7   r[   r\   r]   r^   r8   )r:   r;   ra   irb   rc   r0   r0   r1   test_plot_and_save_4S  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    n1 s0    Y  d S )Nr9   r:   r;   r<   r=   rI   rM   rr   ztest_advanced_inf_sum.pngFr6   Tr   ztest_advanced_fin_sum.png)r*   r%   r   r   r   r   r   r7   r[   r\   r]   r^   r8   Zonly_integersZsteps)r:   r;   ra   srb   rc   r0   r0   r1   test_plot_and_save_5p  s     
$

r   c            	      C   sf  t std td} tdd0}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    n1 sX0    Y  d S )Nr9   r:   r<   r=   ztest.pngrQ   rM   ))      ?r0   ))rQ   r   r   r0   0   gư>{Gz?)r*   r%   r   r   r   r   r   r   r7   r[   r\   r]   r   r	   r   r   r   )	r:   ra   rc   rb   x1m1Zx2m2exprr0   r0   r1   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    n1 s0    Y  d S )Nr9   r:   r;   r<   r=   Fr~   rk   )rl   rm   r6   rM   ztest_grid1.pngrL   rO   ztest_grid2.pngc                 S   s   | S r3   r0   rD   r0   r0   r1   rF     rG   z(test_plotgrid_and_save.<locals>.<lambda>r   rI   rT   rU   rP   rQ   rR   ztest_grid3.png)r*   r%   r   r   r   r   r   r   r   r    r7   r[   r\   r]   r^   r8   r   rW   r   r   )r:   r;   ra   rd   re   p3p4rb   rc   Zp5Zp6Zp7r0   r0   r1   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sTJ tt || W d    n1 s|0    Y  tt ||j W d    n1 s0    Y  d S )Nr9   r:   rM   r   )	r*   r%   r   r   r_   lenZ_seriesr&   	TypeError)r:   rd   re   r0   r0   r1   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 )Nr9   r:   rU   rI   rZ   Zylimz-3.14z3.14c                      s   t  tj dfddS NrI   r   r   r   r   ZImaginaryUnitr0   Zeqnr0   r1   rF     rG   z"test_issue_15265.<locals>.<lambda>c                      s   t  ddtjfdS Nr   rU   r   r   r0   r   r0   r1   rF     rG   c                      s   t  tjdfddS r   )r   r   NegativeInfinityr0   r   r0   r1   rF     rG   c                      s   t  ddtjfdS r   )r   r   Infinityr0   r   r0   r1   rF     rG   )r*   r%   r   r   r   r   Pir^   r8   r   r&   r`   r:   rb   r0   r   r1   test_issue_15265  s0    







r   c                  C   s$   t std t  t } |   d S )Nr9   )r*   r%   r   r   r6   )rb   r0   r0   r1   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s`J d S )Nr9   r:   g333333?rr   rL   rM   Fr~   r   rn   )r*   r%   r   r   r   get_datar:   rf   rb   r0   r0   r1   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sFJ |d jd
ksXJ |d jdksjJ d S )Nr9   r:   gMbP?d   r   F)Zxscaler6   r   rn   g      Y@)r*   r%   r   r   r   r   endstartr   r0   r0   r1   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 )Nr9   r:   Fr~   r   rn   )r*   r%   r   r   r	   r   r   r   r0   r0   r1   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sJ d S )
Nr9   kT)integerr   rM   Fr~   rn   )r*   r%   r   r   r   r
   r   r   r   r   r   )r   rf   rb   r0   r0   r1   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sNJ d S )	Nr9   r:   rM   rL   Fr~   r   rn   )r*   r%   r   r   r   r   r   r   r   r0   r0   r1   test_issue_11461:  s
    r   c                  C   sf   t std td} tt| t| | ddt fddd}|jdksFJ t|d 	 d dksbJ d S )	Nr9   r:   r   rM   rJ   F)rY   r6   rn   )
r*   r%   r   r   r   r   r   rY   r   r   r   r0   r0   r1   test_issue_11764F  s    $r   c                  C   s  t std td} tt| ddd}|jtks4J t|d  d dksPJ tt| ddd}|jt	kspJ t|d  d dksJ tt| d	dd}|jt
ksJ t|d  d dksJ tt| dd
}|jt
ksJ t|d  d dksJ d S )Nr9   r:   r*   Fbackendr6   r   rn   textdefaultr~   )r*   r%   r   r   r   r   r"   r   r   r#   r!   )r:   Zpmptpdrb   r0   r0   r1   test_issue_13516R  s    r   c                  C   s   t std td} t| | d | ddf}|j}|jd  \}}t|d dk sVJ t|d dk sjJ |jd  \}}t|d dk sJ t|d dk sJ d S )Nr9   r:   rM   r   rr   r   r   )	r*   r%   r   r   r^   axget_xlimabsget_ylim)r:   rb   r   xminxmaxyminymaxr0   r0   r1   test_plot_limitsi  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 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 sJ t||}|j}|jd  \}}t	|d dk sLJ t	|d dk sbJ |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 )	Nr9   r:   rM   rP   rQ   r   r   rr   )r*   r%   r   r   r   r   r^   r   r   r   r   Zget_zlim)r:   v1v2rb   r   r   r   r   r   ZzminZzmaxr0   r0   r1   "test_plot3d_parametric_line_limitsy  s6    &

r   c                  C   s   t std td} tt| ddd}|jj }|d dkrJ|d d	ksNJ tt| dd
d}|jj }|d dkr|d dksJ tdd||dd}|jj }|d dkr|d dksJ t	t
" tt| ddd W d    n1 s0    Y  d S )Nr9   r:   r*   )   rO   )r   sizer   r   rI   rO   )rQ   rr   rQ   rr   rM   )rv   rM   )r   rv   )rU   rL   )r*   r%   r   r   r   r^   ZfigZget_size_inchesr    r&   r`   )r:   rd   s1re   s2r   Zs3r0   r0   r1   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 sD0    Y  tt| tdd}|j	tksnJ t
|d  d dksJ tt| tdd}|j	tksJ t
|d  d dksJ tt| tdd}|j	tksJ t
|d  d dksJ tt |  W d    n1 s,0    Y  tt |d W d    n1 s`0    Y  tt |j  W d    n1 s0    Y  d S )Nr9   r:   Fr   r   rn   z	test/path)r*   r%   r   r&   r   r   r   r   r"   r   r   r   r2   r+   NotImplementedErrorr6   r7   r^   r8   )r:   re   r   r   r0   r0   r1   test_issue_20113  s(    
0
(
*
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   s   | S r3   r0   rD   r0   r0   r1   rF     rG   z&test_custom_coloring.<locals>.<lambda>)rW   rI   rc                 S   s   | S r3   r0   rD   r0   r0   r1   rF     rG   c                 S   s   | S r3   r0   rD   r0   r0   r1   rF     rG   rP   rQ   c                 S   s   | d |d  S NrM   r0   rq   r0   r0   r1   rF     rG   )rx   c                 S   s   | d |d  S r   r0   rq   r0   r0   r1   rF     rG   )r   r   r   r   r   r   r   r   rS   r0   r0   r1   test_custom_coloring  s8     r   c                  C   sf   t std td} t| }t|| ddfdd}t  |d   W d    n1 sX0    Y  d S )Nr9   r:   r   rr   Fr~   r   )r*   r%   r   r   r   r(   Zget_segmentsr   r0   r0   r1   test_deprecated_get_segments  s    r   )Wr[   tempfiler   Zsympy.concrete.summationsr   Zsympy.core.numbersr   r   r   Zsympy.core.relationalr   Zsympy.core.symbolr   Z&sympy.functions.elementary.exponentialr	   r
   r   r   Z(sympy.functions.elementary.miscellaneousr   r   Z$sympy.functions.elementary.piecewiser   Z(sympy.functions.elementary.trigonometricr   r   Zsympy.functions.special.hyperr   Zsympy.integrals.integralsr   Zsympy.logic.boolalgr   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'   r(   Zsympy.utilitiesr)   rw   RuntimeErrorr*   r+   r2   rg   rp   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r0   r0   r0   r1   <module>   s`    $QxQ& 
"