
    sg                        	 d dl mZmZmZ d dlmZ d dlm	Z	 eej                  fdZeej                  f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d Zd Zd ZddZd Zd Zd Zd Z y# e$ r Y qw xY w)    )c_floatc_intc_doubleN)Sc                 H     | dz         } |t         j                  |       |S z/
    Returns the current modelview matrix.
       )pglGL_MODELVIEW_MATRIX
array_typeglGetMethodms      Q/var/www/html/venv/lib/python3.12/site-packages/sympy/plotting/pygletplot/util.pyget_model_matrixr   
   s'     
BA''+H    c                 H     | dz         } |t         j                  |       |S r   )r
   GL_PROJECTION_MATRIXr   s      r   get_projection_matrixr      s'     
BA((!,Hr   c                  h    t        dz         } t        j                  t        j                  |        | S )z'
    Returns the current viewport.
       )r   r
   glGetIntegervGL_VIEWPORTr   s    r   get_viewportr      s(     
qAcooq)Hr   c                  h    t               } | d   | d   | d   f| d   | d   | d   f| d   | d   | d	   ffS )
Nr   r            	         
   r   r   s    r   get_direction_vectorsr%   %   V    AqT1Q41qT1Q41qT1Q42! !r   c                  h    t               } | d   | d   | d   f| d   | d   | d   f| d   | d   | d	   ffS )
Nr   r   r!   r   r   r"   r   r    r#   r$   r   s    r   get_view_direction_vectorsr(   ,   r&   r   c                       y)N))r   r   r   )r   r   r   )r   r   r    r*   r   r   get_basis_vectorsr+   3   s    ,r   c                    t        t        t        j                        }t	        t        t        j                        }t               }t               t               t               }}}t        j                  | ||||||||	       t        |j                        t        |j                        t        |j                        fS N)	r   r   r
   glGetDoublevr   r   gluUnProjectfloatvalue	xyzr   pwmxmymzs	            r   screen_to_modelr;   7   s    3#3#34Ah(8(89AAXZBBQ1aAr2r2?E"((OU288_<<r   c                    t        t        t        j                        }t	        t        t        j                        }t               }t               t               t               }}}t        j                  | ||||||||	       t        |j                        t        |j                        t        |j                        fS r-   )	r   r   r
   r.   r   r   
gluProjectr0   r1   r2   s	            r   model_to_screenr>   @   s    3#3#34Ah(8(89AAXZBBNN1aAq!RR0?E"((OU288_<<r   c                 T     t         fdt        t                     D              S )Nc              3   4   K   | ]  }|   |   z
    y wr-   r*   ).0iabs     r   	<genexpr>zvec_subs.<locals>.<genexpr>J   s     41!4   )tuplerangelen)rC   rD   s   ``r   vec_subsrJ   I   s    4eCFm444r   c                      t               } d| d<   d| d<   d| d<   d| d<   d| d<   d| d<   d| d<   d| d<   d| d	<   t        j                  |        y
)z
    Removes rotational components of
    current matrix so that primitives
    are always drawn facing the viewer.

    |1|0|0|x|
    |0|1|0|x|
    |0|0|1|x| (x means left unchanged)
    |x|x|x|x|
    r   r   r!   r   r   r"   r   r    r#   N)r   r
   glLoadMatrixfr   s    r   billboard_matrixrM   M   sk     	AAaDAaDAaDAaDAaDAaDAaDAaDAbEar   c                      t         j                  t         j                  dgt         j                  t         j                  dgt         j                  t         j                  dggS )Nr   )r   InfinityNegativeInfinityr*   r   r   create_boundsrQ   f   sH    ZZ++Q/ZZ++Q/ZZ++Q/1 1r   c                     |y t        d      D ]:  }t        | |   d   ||   g      | |   d<   t        | |   d   ||   g      | |   d<   < y )N   r   r   )rH   minmax)rD   vaxiss      r   update_boundsrX   l   sc    ya 0!D'!*ag./$
!D'!*ag./$
0r   c                     | ||| z
  z  z   S r-   r*   )a_mina_maxa_ratios      r   interpolater]   t   s    7eem,,,r   c                 <    || z
  }|| k(  rd}|| z
  t        |      z  S )Ng      ?)r0   )rZ   r[   a_valuea_ranges       r   rinterpolatera   x   s*    emG~eOuW~--r   c                 F     t         fdt        d      D              S )Nc              3   D   K   | ]  }t        |   |           y wr-   )r]   )rA   rB   color1color2ratios     r   rE   z$interpolate_color.<locals>.<genexpr>   s"     LaVAYq	59Ls    rS   rG   rH   )rd   re   rf   s   ```r   interpolate_colorrh      s    L58LLLr   c                     | |z
  |z  S r-   r*   )rV   v_minv_lens      r   scale_valuerl      s    Ir   c                 x    t        |       t        |       }}||z
  }| D cg c]  }t        |||       c}S c c}w r-   )rT   rU   rl   )flistrj   v_maxrk   fs        r   scale_value_listrq      s9    u:s5z5EEME278QK5%(888s   7c                    | |}}t        | |z
        dk  rg S 	 t        t        | |z
               | |kD  rt        d      | |z  }|||z  z
  }t        ||z
        dk  rd}| |z  } ||z  }t        || z
  |z        }|r||kD  rt        |||dz        S | gt        d|dz         D 	cg c]
  }	| |	|z  z    c}	z   |gz   S # t        t        f$ r g cY S w xY wc c}	w )NgMbP?z"r_min cannot be greater than r_maxg        r!   r   )absrH   int	TypeErrorOverflowError
ValueErrorstrided_range)
r_minr_maxstride	max_stepso_mino_maxr_min_sr_max_sr_stepses
             r   rx   rx      s   %5E
55=E!	c%%- ! u}=>>v~G'G
7Vu$	WE	WE55=&()GWy(UE6!8447a10EF1eah&FF%PP }% 	 Gs   B= %C=CCc                 ,   t        | t              sy i }| j                  d      D ]l  }|j                  d      }t        |      dk(  r|d   d}}n"t        |      dk(  r|\  }}nt	        d| z        |j                         ||j                         <   n |S )N;=r   r    r!   z%Plot option string '%s' is malformed.)
isinstancestrsplitrI   rw   strip)soptionstokenpiecesoptionr1   s         r   parse_option_stringr      s    aG 0S!v;!"1IrEF[A"MFEDJKK"'++-0 Nr   c                 B     t         fdt        d      D              S )Nc              3   4   K   | ]  }|   |   z    y wr-   r*   rA   rB   v1v2s     r   rE   zdot_product.<locals>.<genexpr>   s     -qr!uRU{-rF   rS   sumrH   r   r   s   ``r   dot_productr      s    -E!H---r   c                 B     t         fdt        d      D              S )Nc              3   4   K   | ]  }|   |   z
    y wr-   r*   r   s     r   rE   zvec_sub.<locals>.<genexpr>   s     11AA1rF   rS   rg   r   s   ``r   vec_subr      s    1a111r   c                 D     t         fdt        d      D              dz  S )Nc              3   .   K   | ]  }|   d z    yw)r!   Nr*   )rA   rB   rV   s     r   rE   zvec_mag.<locals>.<genexpr>   s     )1qtQw)s   rS   g      ?r   )rV   s   `r   vec_magr      s    )a))C00r   )2   )!ctypesr   r   r   ImportError	pyglet.glglr
   
sympy.corer   glGetFloatvr   r   r   r%   r(   r+   r;   r>   rJ   rM   rQ   rX   r]   ra   rh   rl   rq   rx   r   r   r   r   r*   r   r   <module>r      s   	//   !(S__  &-#// !!-==5210-.M9Q, .21q  		s   
A6 6A>=A>