o
    g,                     @   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         )	wireframesolidbothr   )333333?r   r   )333333?r   g?xyc                 C   s@   | j rz|  }|W S  ty   td Y |  S w |  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   _/var/www/visachat/venv/lib/python3.10/site-packages/sympy/plotting/pygletplot/plot_mode_base.py_get_evaluatorm   s   zPlotModeBase._get_evaluatorc                 C      t  NNotImplementedErrorr   r   r   r   r   w      z!PlotModeBase._get_sympy_evaluatorc                 C   r    r!   r"   r$   r   r   r   r   z   r%   z"PlotModeBase._get_lambda_evaluatorc                 C   r    r!   r"   r$   r   r   r   _on_calculate_verts}   r%   z PlotModeBase._on_calculate_vertsc                 C   r    r!   r"   r$   r   r   r   _on_calculate_cverts   r%   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   use_sympy_evalstyler   colorrainbow)vertscvertsr   InfinityNegativeInfinitybounds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                    s>   | j   z | g|R i |}|W | j   S | j   w r!   )r4   acquirerelease)r   rE   rF   rfr   r   w   s
   
z$PlotModeBase.synchronized.<locals>.wr   )rL   rM   r   rK   r   synchronized   s   zPlotModeBase.synchronizedc                 C   8   t |sJ | j| t| j| jkr| jd= dS 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)callabler<   appendlenr;   r   functionr   r   r   push_wireframe   
   zPlotModeBase.push_wireframec                 C   rO   rP   )rQ   r=   rR   rS   r;   rT   r   r   r   
push_solid   rW   zPlotModeBase.push_solidc                 C   s*   t d}t |t j |  t   |S )Nr   )pgl
glGenLists	glNewList
GL_COMPILE	glEndList)r   rU   dlr   r   r   _create_display_list   s
   
z!PlotModeBase._create_display_listc                 C   s   |d }|dkr
dS t |r| |}||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   )rQ   r_   rS   rY   GL_TRUEglIsList)r   render_stacktopr^   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!   )	rY   glPushAttribGL_ENABLE_BITGL_POLYGON_BITglPolygonModeGL_FRONT_AND_BACKGL_FILL
glCallListglPopAttribr   r^   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{Gztg      I)rY   re   rf   rg   rh   ri   GL_LINEglEnableGL_POLYGON_OFFSET_LINEglPolygonOffsetrk   rl   rm   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@ r8| | j}|dkr8tjt	|kr8| 
| |d@ rS| | j}|dkrStjt	|krS| | | jD ]	}t|r_|  qVd S )Nr   r   r   )r@   rQ   style_overridestylesr>   rd   r=   rY   r`   ra   rn   r<   rs   rA   )r   rL   r+   r^   r   r   r   draw   s(   



zPlotModeBase.drawc                 C      t | jd  d S N)target)r   _calculate_cvertsstart)r   r,   r   r   r   _on_change_color     zPlotModeBase._on_change_colorc                 C   rw   rx   )r   _calculate_allr{   r$   r   r   r   rD     r}   zPlotModeBase._on_calculatec                 C   s   |    |   d S r!   )_calculate_vertsrz   r$   r   r   r   r~     s   zPlotModeBase._calculate_allc                 C   sV   | j  rd S | j   z|   W | j   n| j   w t| jr)|   d S d S r!   )r5   is_setsetr&   clearrQ   r(   r$   r   r   r   r     s   



zPlotModeBase._calculate_vertsc                 C   sZ   | j  rd S | j rtd | j s| j  z|   W | j  d S | j  w )Nr   )r5   r   r6   r   r   r'   r   r$   r   r   r   rz     s   




zPlotModeBase._calculate_cvertsc                 C   
   | j  S r!   )r5   r   r$   r   r   r   _get_calculating_verts%     
z#PlotModeBase._get_calculating_vertsc                 C      | j S r!   )r7   r$   r   r   r   _get_calculating_verts_pos(  r%   z'PlotModeBase._get_calculating_verts_posc                 C   r   r!   )r8   r$   r   r   r   _get_calculating_verts_len+  r%   z'PlotModeBase._get_calculating_verts_lenc                 C   r   r!   )r6   r   r$   r   r   r   _get_calculating_cverts.  r   z$PlotModeBase._get_calculating_cvertsc                 C   r   r!   )r9   r$   r   r   r   _get_calculating_cverts_pos1  r%   z(PlotModeBase._get_calculating_cverts_posc                 C   r   r!   )r:   r$   r   r   r   _get_calculating_cverts_len4  r%   z(PlotModeBase._get_calculating_cverts_lenc                 C   r   r!   )r>   r$   r   r   r   
_get_style8  r%   zPlotModeBase._get_stylec                 C   s|   |d u rd S |dkr)d}| j D ]}|jd u rqt|t|jg}qddg|dk }|| jvr2td|| jkr9d S || _d S )Nr   r   r   r   (   z v should be there in self.styles)	intervalsv_stepsmaxintru   
ValueErrorr>   )r   vstep_maxir   r   r   
_set_style;  s   




zPlotModeBase._set_stylec                 C   r   r!   )r?   r$   r   r   r   
_get_colorL  r%   zPlotModeBase._get_colorc              
   C   sz   z(|d urt |rt| }nt|}t|t| jkrW d S | | || _W d S  ty< } ztdt| d }~ww )NzColor change failed. Reason: %s)r   r   reprr?   r|   r   RuntimeErrorstr)r   r   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       | ]}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   rL   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   r   r!   r   r   r   r   r   r   r  r   z(PlotModeBase.__repr__.<locals>.<genexpr>c                 s   r   r!   r   )r   r   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   kr   r   r   r   r   x  s    
)r   r   r   r   r   r,   r+   )r   rL   r   r   r   r   r   r   __repr__q  s   
zPlotModeBase.__repr__)6__name__
__module____qualname____doc__i_varsr   r   aliases
is_defaultru   rt   default_wireframe_colordefault_solid_colordefault_rot_presetr   r   r   r&   r'   rG   rN   rV   rX   r_   rd   rn   rs   rv   r|   rD   r~   r   rz   r   r   r   r   r   r   r   r   r   r   propertyr+   r,   calculating_vertscalculating_verts_poscalculating_verts_lencalculating_cvertscalculating_cverts_poscalculating_cverts_lenr   r   r   r   r   r   r
      s    
$







r
   )	pyglet.glglrY   
sympy.corer   &sympy.plotting.pygletplot.color_schemer   #sympy.plotting.pygletplot.plot_moder   sympy.utilities.iterablesr   timer   	threadingr   r   r	   r   r
   r   r   r   r   <module>   s    