
    sg,                     ~    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	e      Zy)
    N)S)ColorScheme)PlotMode)is_sequence)sleep)ThreadEventRLockc                      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 Zd Zd Zd Zd ZdddZd Zed        Zed        Zd Zd Zd Zd Zed        Zd Zd Zd Zd Zd  Z d! Z!d" Z"d# Z#d$ Z$d% Z%d& Z&d' Z'ed(        Z(d) Z)ed*        Z* e+e'e(      Z, e+e)e*      Z- e+e!      Z. e+e"      Z/ e+e#      Z0 e+e$      Z1 e+e%      Z2 e+e&      Z3d+ Z4d, Z5y)-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                     | j                   r	 | j                         }|S | j                         S # t        $ r' t        j                  d       Y | j                         S w xY w)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es     [/var/www/html/venv/lib/python3.12/site-packages/sympy/plotting/pygletplot/plot_mode_base.py_get_evaluatorzPlotModeBase._get_evaluatorm   si    @..0 ((**  @ ? @((**@s   0 A A c                     t               NNotImplementedErrorr   s    r    r   z!PlotModeBase._get_sympy_evaluatorw       !##    c                     t               r#   r$   r&   s    r    r   z"PlotModeBase._get_lambda_evaluatorz   r'   r(   c                     t               r#   r$   r&   s    r    _on_calculate_vertsz PlotModeBase._on_calculate_verts}   r'   r(   c                     t               r#   r$   r&   s    r    _on_calculate_cvertsz!PlotModeBase._on_calculate_cverts   r'   r(   N)bounds_callbackc                   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.                  j1                  dd       d u | _        | j.                  j1                  dd      | _        | j.                  j1                  dd	      | _        || _        | j;                          y )
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   r2   r3   r.   _on_calculate)r   r.   argskwargss       r    __init__zPlotModeBase.__init__   sv   


A$6$6:

A$6$6:

A$6$6:< Q%7%7;Q%7%7;Q%7%7;=  '"''#(7 &)#&)#'*$'*$&'# "t4#||//0@$G4O\\%%gr2
\\%%gy9
.r(   c                       fd}|S )Nc                     | j                   j                          	  | g|i |}|| j                   j                          S # | j                   j                          w xY wr#   )r;   acquirerelease)r   rL   rM   rfs       r    wz$PlotModeBase.synchronized.<locals>.w   sP    OO##%*d,T,V,'')'')s   A A! )rT   rU   s   ` r    synchronizedzPlotModeBase.synchronized   s    	* r(   c                     t        |      sJ | j                  j                  |       t        | j                        | j                  kD  r| j                  d= yyz
        Push a function which performs gl commands
        used to build a display list. (The list is
        built outside of the function)
        r   N)callablerC   appendlenrB   r   functions     r    push_wireframezPlotModeBase.push_wireframe   sS     !!!##H-t##$t'B'BB$$Q' Cr(   c                     t        |      sJ | j                  j                  |       t        | j                        | j                  kD  r| j                  d= yyrY   )rZ   rD   r[   r\   rB   r]   s     r    
push_solidzPlotModeBase.push_solid   sR     !!!)t 4#>#>>  # ?r(   c                     t        j                  d      }t        j                  |t         j                          |        t        j                          |S )Nr   )pgl
glGenLists	glNewList
GL_COMPILE	glEndList)r   r^   dls      r    _create_display_listz!PlotModeBase._create_display_list   s5    ^^Ab#..)
	r(   c                    |d   }|dk(  ryt        |      r| j                  |      }||f|d<   |S t        |      dk(  rNt        j                  t        j
                  |d         k(  r|d   S | j                  |d         }||d   f|d<   |S y )Nr0   r   r   r   )rZ   ri   r\   rc   GL_TRUEglIsList)r   render_stacktoprh   s       r    _render_stack_topzPlotModeBase._render_stack_top   s    2"9c]**3/B "CyLIX]{{cll3q6221v**3q62B "CF|LI r(   c                 "   t        j                  t         j                  t         j                  z         t        j                  t         j
                  t         j                         t        j                  |       t        j                          y r#   )	rc   glPushAttribGL_ENABLE_BITGL_POLYGON_BITglPolygonModeGL_FRONT_AND_BACKGL_FILL
glCallListglPopAttribr   rh   s     r    _draw_solid_display_listz%PlotModeBase._draw_solid_display_list   sQ    **S-?-??@#//=rr(   c                    t        j                  t         j                  t         j                  z         t        j                  t         j
                  t         j                         t        j                  t         j                         t        j                  dd       t        j                  |       t        j                          y )Ng{Gztg      I)rc   rq   rr   rs   rt   ru   GL_LINEglEnableGL_POLYGON_OFFSET_LINEglPolygonOffsetrw   rx   ry   s     r    _draw_wireframe_display_listz)PlotModeBase._draw_wireframe_display_list   ss    **S-?-??@#//=S//0FE*rr(   c                    | j                   D ]  }t        |      s |         | j                  r| j                  | j                     }n| j                  | j                     }|dz  rW| j                  | j                        }|dkD  r7t        j                  t        j                  |      k(  r| j                  |       |dz  rW| j                  | j                        }|dkD  r7t        j                  t        j                  |      k(  r| j                  |       | j                  D ]  }t        |      s |         y )Nr   r   r   )rG   rZ   style_overridestylesrE   ro   rD   rc   rk   rl   rz   rC   r   rH   )r   rT   r2   rh   s       r    drawzPlotModeBase.draw   s     	A{	 KK 3 34EKK,E19''(8(89BAv#++b)99--b119''(<(<=BAv#++b)9911"5 	A{	r(   c                 L    t        | j                        j                          y N)target)r   _calculate_cvertsstart)r   r3   s     r    _on_change_colorzPlotModeBase._on_change_color  s    d,,-335r(   c                 L    t        | j                        j                          y r   )r   _calculate_allr   r&   s    r    rK   zPlotModeBase._on_calculate  s    d))*002r(   c                 D    | j                          | j                          y r#   )_calculate_vertsr   r&   s    r    r   zPlotModeBase._calculate_all  s     r(   c                 N   | j                   j                         ry | j                   j                          	 | j                          | j                   j	                          t        | j                        r| j                          y y # | j                   j	                          w xY wr#   )r<   is_setsetr+   clearrZ   r.   r&   s    r    r   zPlotModeBase._calculate_verts  s    ""))+##%	,$$&##))+D(()  " * ##))+s   B B$c                    | j                   j                         ry | j                  j                         r&t        d       | j                  j                         r&| j                  j	                          	 | j                          | j                  j                          y # | j                  j                          w xY w)Nr   )r<   r   r=   r   r   r-   r   r&   s    r    r   zPlotModeBase._calculate_cverts  s    ""))+&&--/!H &&--/  $$&	-%%'$$**,D$$**,s   7B" "B>c                 6    | j                   j                         S r#   )r<   r   r&   s    r    _get_calculating_vertsz#PlotModeBase._get_calculating_verts%  s    &&--//r(   c                     | j                   S r#   )r>   r&   s    r    _get_calculating_verts_posz'PlotModeBase._get_calculating_verts_pos(      ***r(   c                     | j                   S r#   )r?   r&   s    r    _get_calculating_verts_lenz'PlotModeBase._get_calculating_verts_len+  r   r(   c                 6    | j                   j                         S r#   )r=   r   r&   s    r    _get_calculating_cvertsz$PlotModeBase._get_calculating_cverts.  s    ''..00r(   c                     | j                   S r#   )r@   r&   s    r    _get_calculating_cverts_posz(PlotModeBase._get_calculating_cverts_pos1      +++r(   c                     | j                   S r#   )rA   r&   s    r    _get_calculating_cverts_lenz(PlotModeBase._get_calculating_cverts_len4  r   r(   c                     | j                   S r#   )rE   r&   s    r    
_get_stylezPlotModeBase._get_style8      {{r(   c                    |y |dk(  rJd}| j                   D ]/  }|j                  t        |t        |j                        g      }1 ddg|dkD     }|| j                  vrt        d      || j                  k(  ry || _        y )Nr   r   r   r   (   z v should be there in self.styles)	intervalsv_stepsmaxintr   
ValueErrorrE   )r   vstep_maxis       r    
_set_stylezPlotModeBase._set_style;  s    97H^^ ;99$#aii.9:; !(R-0ADKK?@@r(   c                     | j                   S r#   )rF   r&   s    r    
_get_colorzPlotModeBase._get_colorL  r   r(   c                    	 |t        |      r	t        | }nt        |      }t        |      t        | j                        k(  ry | j	                  |       || _        y # t
        $ r}t        dt        |      z        d }~ww xY w)NzColor change failed. Reason: %s)r   r   reprrF   r   r   RuntimeErrorstr)r   r   r   s      r    
_set_colorzPlotModeBase._set_colorO  s    	9}q>#QA#AAAw$t{{++!!!$DK 	9  -03A 8 9 9	9s   AA A 	B'A>>Bc                     dj                  d | j                  D              }d| j                  z  }dj                  ||g      S )N, c              3   2   K   | ]  }t        |        y wr#   r   .0ds     r    	<genexpr>z'PlotModeBase.__str__.<locals>.<genexpr>m       2c!f2   z	'mode=%s')joind_varsprimary_alias)r   rT   os      r    __str__zPlotModeBase.__str__l  s=    II2dkk224--.yy!Q  r(   c                 ^   dj                  d | j                  D              }dj                  d | j                  D              }d| j                  fdt	        | j
                        fdt	        | j                        fg}ddj                  d	 |D              z  }dj                  |||g      S )
Nr   c              3   2   K   | ]  }t        |        y wr#   r   r   s     r    r   z(PlotModeBase.__repr__.<locals>.<genexpr>r  r   r   c              3   2   K   | ]  }t        |        y wr#   r   )r   r   s     r    r   z(PlotModeBase.__repr__.<locals>.<genexpr>s  s     5c!f5r   moder3   r2   z'%s'z; c              3   :   K   | ]  \  }}|d k7  r	|d|  yw)None=NrV   )r   kr   s      r    r   z(PlotModeBase.__repr__.<locals>.<genexpr>x  s'       >$(Aqf ,-a 0  >s   )r   r   r   r   r   r3   r2   )r   rT   r   r   r   s        r    __repr__zPlotModeBase.__repr__q  s    II2dkk22II5dnn55d(()s4::'s4::') dii  >,- > > ?yy!Q##r(   )6__name__
__module____qualname____doc__i_varsr   r   aliases
is_defaultr   r   default_wireframe_colordefault_solid_colordefault_rot_presetr!   r   r   r+   r-   rN   rW   r_   ra   ri   ro   rz   r   r   r   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   propertyr2   r3   calculating_vertscalculating_verts_poscalculating_verts_lencalculating_cvertscalculating_cverts_poscalculating_cverts_lenr   r   rV   r(   r    r   r      s   
 NFF I G J
 q!4F N 1)+$$$$ /3 "H 	( 	( 	$ 	$  ,63!	#	-0++1,,    9 9 Z,EZ,E !78$%?@$%?@!"9:%&AB%&AB!
	$r(   r   )	pyglet.glglrc   
sympy.corer   &sympy.plotting.pygletplot.color_schemer   #sympy.plotting.pygletplot.plot_moder   sympy.utilities.iterablesr   timer   	threadingr   r	   r
   r   r   rV   r(   r    <module>r      s.      > 8 1  * * o$8 o$r(   