a
    kº”hî,  ã                   @   sx   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 d dlZG dd	„ d	eƒZdS )
é    N)ÚS)ÚColorScheme)ÚPlotMode)Úis_sequence)Úsleep)ÚThreadÚEventÚRLockc                   @   s–  e Zd ZdZd\ZZg Zg ZdZddddœZ	dZ
d	Zd
ZdZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zddœdd„Zdd„ Zedd„ ƒZedd„ ƒZd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zed(d)„ ƒZd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Z d4d5„ Z!d6d7„ Z"d8d9„ Z#d:d;„ Z$d<d=„ Z%d>d?„ Z&d@dA„ Z'edBdC„ ƒZ(dDdE„ Z)edFdG„ ƒZ*e+e'e(ƒZ,e+e)e*ƒZ-e+e!ƒZ.e+e"ƒZ/e+e#ƒZ0e+e$ƒZ1e+e%ƒZ2e+e&ƒZ3dHdI„ Z4dJdK„ Z5dS )LÚPlotModeBasez…
    Intended parent class for plotting
    modes. Provides base functionality
    in conjunction with its parent,
    PlotMode.
    )Ú r   Fé   é   é   )Z	wireframeÚsolidÚbothr   )ç333333ë?r   r   )ç333333ã?r   gÍÌÌÌÌÌì?Zxyc                 C   s:   | j r2z|  ¡ }|W S  ty0   t d¡ Y n0 |  ¡ S )NzQ
Warning: creating lambda evaluator failed. Falling back on SymPy subs evaluator.)Úuse_lambda_evalÚ_get_lambda_evaluatorÚ	ExceptionÚwarningsÚwarnÚ_get_sympy_evaluator)ÚselfÚe© r   úV/var/www/auris/lib/python3.9/site-packages/sympy/plotting/pygletplot/plot_mode_base.pyÚ_get_evaluatorm   s    zPlotModeBase._get_evaluatorc                 C   s
   t ƒ ‚d S ©N©ÚNotImplementedError©r   r   r   r   r   w   s    z!PlotModeBase._get_sympy_evaluatorc                 C   s
   t ƒ ‚d S r   r   r!   r   r   r   r   z   s    z"PlotModeBase._get_lambda_evaluatorc                 C   s
   t ƒ ‚d S r   r   r!   r   r   r   Ú_on_calculate_verts}   s    z PlotModeBase._on_calculate_vertsc                 C   s
   t ƒ ‚d S r   r   r!   r   r   r   Ú_on_calculate_cverts€   s    z!PlotModeBase._on_calculate_cvertsN)Úbounds_callbackc                O   s  g | _ g | _tjtjdgtjtjdgtjtjdgg| _tjtjdgtjtjdgtjtjdgg| _tƒ | _t	ƒ | _
t	ƒ | _d| _d| _d| _d| _d| _dg| _dg| _d | _d | _g | _g | _| j dd ¡d u | _| j dd¡| _| j dd	¡| _|| _|  ¡  d S )
Nr   g        r   éÿÿÿÿZuse_sympy_evalÚstyler   ÚcolorZrainbow)ZvertsZcvertsr   ÚInfinityÚNegativeInfinityZboundsZcboundsr	   Ú
_draw_lockr   Ú_calculating_vertsÚ_calculating_cvertsÚ_calculating_verts_posÚ_calculating_verts_lenÚ_calculating_cverts_posÚ_calculating_cverts_lenÚ_max_render_stack_sizeÚ_draw_wireframeÚ_draw_solidÚ_styleÚ_colorÚpredrawÚpostdrawÚoptionsÚpopr   r&   r'   r$   Ú_on_calculate)r   r$   ÚargsÚkwargsr   r   r   Ú__init__„   s:    þþzPlotModeBase.__init__c                    s   ‡ fdd„}|S )Nc                    sB   | j  ¡  z&ˆ | g|¢R i |¤Ž}|W | j  ¡  S | j  ¡  0 d S r   )r*   ÚacquireÚrelease)r   r;   r<   Úr©Úfr   r   Úw©   s    

þz$PlotModeBase.synchronized.<locals>.wr   )rB   rC   r   rA   r   Úsynchronized¨   s    zPlotModeBase.synchronizedc                 C   s4   t |ƒsJ ‚| j |¡ t| jƒ| jkr0| jd= dS ©z–
        Push a function which performs gl commands
        used to build a display list. (The list is
        built outside of the function)
        r   N)Úcallabler2   ÚappendÚlenr1   ©r   Úfunctionr   r   r   Úpush_wireframe²   s    zPlotModeBase.push_wireframec                 C   s4   t |ƒsJ ‚| j |¡ t| jƒ| jkr0| jd= dS rE   )rF   r3   rG   rH   r1   rI   r   r   r   Ú
push_solid¾   s    zPlotModeBase.push_solidc                 C   s*   t  d¡}t  |t j¡ |ƒ  t  ¡  |S )Nr   )ÚpglZ
glGenListsZ	glNewListZ
GL_COMPILEZ	glEndList)r   rJ   Údlr   r   r   Ú_create_display_listÊ   s
    
z!PlotModeBase._create_display_listc                 C   s„   |d }|dkrdS t |ƒr6|  |¡}||f|d< |S t|ƒdkr€tjt |d ¡kr^|d S |  |d ¡}||d f|d< |S d S )Nr%   r   r   r   )rF   rO   rH   rM   ÚGL_TRUEÚglIsList)r   Zrender_stackÚtoprN   r   r   r   Ú_render_stack_topÑ   s    
zPlotModeBase._render_stack_topc                 C   s8   t  t jt jB ¡ t  t jt j¡ t  |¡ t  ¡  d S r   )	rM   ÚglPushAttribÚGL_ENABLE_BITÚGL_POLYGON_BITÚglPolygonModeÚGL_FRONT_AND_BACKZGL_FILLÚ
glCallListÚglPopAttrib©r   rN   r   r   r   Ú_draw_solid_display_listà   s    
z%PlotModeBase._draw_solid_display_listc                 C   sP   t  t jt jB ¡ t  t jt j¡ t  t j¡ t  	dd¡ t  
|¡ t  ¡  d S )Ng{®Gázt¿g      IÀ)rM   rT   rU   rV   rW   rX   ZGL_LINEZglEnableZGL_POLYGON_OFFSET_LINEZglPolygonOffsetrY   rZ   r[   r   r   r   Ú_draw_wireframe_display_listæ   s    
z)PlotModeBase._draw_wireframe_display_listc                 C   sÄ   | j D ]}t|ƒr|ƒ  q| jr.| j| j }n| j| j }|d@ rp|  | j¡}|dkrptjt 	|¡krp|  
|¡ |d@ r¦|  | j¡}|dkr¦tjt 	|¡kr¦|  |¡ | jD ]}t|ƒr¬|ƒ  q¬d S )Nr   r   r   )r6   rF   Ústyle_overrideÚstylesr4   rS   r3   rM   rP   rQ   r\   r2   r]   r7   )r   rB   r&   rN   r   r   r   Údrawî   s"    



zPlotModeBase.drawc                 C   s   t | jd ¡  d S ©N)Útarget)r   Ú_calculate_cvertsÚstart)r   r'   r   r   r   Ú_on_change_color  s    zPlotModeBase._on_change_colorc                 C   s   t | jd ¡  d S ra   )r   Ú_calculate_allrd   r!   r   r   r   r:     s    zPlotModeBase._on_calculatec                 C   s   |   ¡  |  ¡  d S r   )Ú_calculate_vertsrc   r!   r   r   r   rf     s    zPlotModeBase._calculate_allc                 C   sR   | j  ¡ rd S | j  ¡  z|  ¡  W | j  ¡  n| j  ¡  0 t| jƒrN|  ¡  d S r   )r+   Úis_setÚsetr"   ÚclearrF   r$   r!   r   r   r   rg     s    



zPlotModeBase._calculate_vertsc                 C   sT   | j  ¡ rd S | j ¡ r"tdƒ q| j ¡  z|  ¡  W | j ¡  n| j ¡  0 d S )Nr   )r+   rh   r,   r   ri   r#   rj   r!   r   r   r   rc     s    




zPlotModeBase._calculate_cvertsc                 C   s
   | j  ¡ S r   )r+   rh   r!   r   r   r   Ú_get_calculating_verts%  s    z#PlotModeBase._get_calculating_vertsc                 C   s   | j S r   )r-   r!   r   r   r   Ú_get_calculating_verts_pos(  s    z'PlotModeBase._get_calculating_verts_posc                 C   s   | j S r   )r.   r!   r   r   r   Ú_get_calculating_verts_len+  s    z'PlotModeBase._get_calculating_verts_lenc                 C   s
   | j  ¡ S r   )r,   rh   r!   r   r   r   Ú_get_calculating_cverts.  s    z$PlotModeBase._get_calculating_cvertsc                 C   s   | j S r   )r/   r!   r   r   r   Ú_get_calculating_cverts_pos1  s    z(PlotModeBase._get_calculating_cverts_posc                 C   s   | j S r   )r0   r!   r   r   r   Ú_get_calculating_cverts_len4  s    z(PlotModeBase._get_calculating_cverts_lenc                 C   s   | j S r   )r4   r!   r   r   r   Ú
_get_style8  s    zPlotModeBase._get_stylec                 C   s|   |d u rd S |dkrRd}| j D ]"}|jd u r.qt|t|jƒgƒ}qddg|dk }|| jvrdtdƒ‚|| jkrrd S || _d S )Nr   r   r   r   é(   z v should be there in self.styles)Ú	intervalsZv_stepsÚmaxÚintr_   Ú
ValueErrorr4   )r   ÚvZstep_maxÚir   r   r   Ú
_set_style;  s    



zPlotModeBase._set_stylec                 C   s   | j S r   )r5   r!   r   r   r   Ú
_get_colorL  s    zPlotModeBase._get_colorc              
   C   sˆ   zN|d ur$t |ƒrt|Ž }nt|ƒ}t|ƒt| jƒkr<W d S |  |¡ || _W n4 ty‚ } ztdt|ƒ ƒ‚W Y d }~n
d }~0 0 d S )NzColor change failed. Reason: %s)r   r   Úreprr5   re   r   ÚRuntimeErrorÚstr)r   rw   r   r   r   r   Ú
_set_colorO  s    


ÿzPlotModeBase._set_colorc                 C   s.   d  dd„ | jD ƒ¡}d| j }d  ||g¡S )Nú, c                 s   s   | ]}t |ƒV  qd S r   ©r}   ©Ú.0Údr   r   r   Ú	<genexpr>m  ó    z'PlotModeBase.__str__.<locals>.<genexpr>z	'mode=%s')ÚjoinÚd_varsÚprimary_alias)r   rB   Úor   r   r   Ú__str__l  s    
zPlotModeBase.__str__c                 C   sx   d  dd„ | jD ƒ¡}d  dd„ | jD ƒ¡}d| jfdt| jƒfdt| jƒfg}dd	  d
d„ |D ƒ¡ }d  |||g¡S )Nr   c                 s   s   | ]}t |ƒV  qd S r   r€   r   r   r   r   r„   r  r…   z(PlotModeBase.__repr__.<locals>.<genexpr>c                 s   s   | ]}t |ƒV  qd S r   r€   )r‚   rx   r   r   r   r„   s  r…   Úmoder'   r&   z'%s'z; c                 s   s&   | ]\}}|d krd||f V  qdS )ÚNonez%s=%sNr   )r‚   Úkrw   r   r   r   r„   x  s   ÿ)r†   r‡   rs   rˆ   r}   r'   r&   )r   rB   rx   rƒ   r‰   r   r   r   Ú__repr__q  s    þÿ
zPlotModeBase.__repr__)6Ú__name__Ú
__module__Ú__qualname__Ú__doc__Zi_varsr‡   rs   ÚaliasesZ
is_defaultr_   r^   Zdefault_wireframe_colorZdefault_solid_colorZdefault_rot_presetr   r   r   r"   r#   r=   rD   rK   rL   rO   rS   r\   r]   r`   re   r:   rf   rg   rc   rk   rl   rm   rn   ro   rp   rq   ry   rz   r~   Úpropertyr&   r'   Zcalculating_vertsZcalculating_verts_posZcalculating_verts_lenZcalculating_cvertsZcalculating_cverts_posZcalculating_cverts_lenrŠ   rŽ   r   r   r   r   r
      sl   	


$







r
   )Z	pyglet.glÚglrM   Z
sympy.corer   Z&sympy.plotting.pygletplot.color_schemer   Z#sympy.plotting.pygletplot.plot_moder   Zsympy.utilities.iterablesr   Útimer   Ú	threadingr   r   r	   r   r
   r   r   r   r   Ú<module>   s   