U
    9%e                     @   s  zd dl mZmZmZ W n ek
r,   Y nX d dlmZ d dlm	Z	 eej
fddZeej
fddZdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd1d'd(Zd)d* Zd+d, Zd-d. Zd/d0 Z dS )2    )c_floatc_intc_doubleN)Sc                 C   s   | d  }|t j| |S z/
    Returns the current modelview matrix.
       )pglZGL_MODELVIEW_MATRIXZ
array_typeZglGetMethodm r   ]/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/plotting/pygletplot/util.pyget_model_matrix
   s    
r   c                 C   s   | d  }|t j| |S r   )r   ZGL_PROJECTION_MATRIXr	   r   r   r   get_projection_matrix   s    
r   c                  C   s   t d  } ttj|  | S )z'
    Returns the current viewport.
       )r   r   ZglGetIntegervZGL_VIEWPORTr
   r   r   r   get_viewport   s    
r   c                  C   sF   t  } | d | d | d f| d | d | d f| d | d | d	 ffS )
Nr   r            	         
   r   r   r   r   r   get_direction_vectors%   s
    r   c                  C   sF   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   r   r   r   get_view_direction_vectors,   s
    r   c                   C   s   dS )N))r   r   r   )r   r   r   )r   r   r   r   r   r   r   r   get_basis_vectors3   s    r   c           	      C   sj   t ttj}tttj}t }t t t   }}}t| ||||||||	 t|jt|jt|jfS N)	r   r   r   glGetDoublevr   r   ZgluUnProjectfloatvalue	xyzr
   pwZmxZmyZmzr   r   r   screen_to_model7   s    r'   c           	      C   sj   t ttj}tttj}t }t t t   }}}t| ||||||||	 t|jt|jt|jfS r   )	r   r   r   r   r   r   Z
gluProjectr   r    r!   r   r   r   model_to_screen@   s    r(   c                    s    t  fddtt D S )Nc                 3   s   | ]} | |  V  qd S r   r   .0iabr   r   	<genexpr>J   s     zvec_subs.<locals>.<genexpr>)tuplerangelenr,   r   r,   r   vec_subsI   s    r3   c                  C   s\   t  } d| d< d| d< d| d< d| d< d| d< d| d< d| d< d| d< d| d	< t|  d
S )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   ZglLoadMatrixfr   r   r   r   billboard_matrixM   s    r4   c                   C   s(   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   r   create_boundsf   s    r7   c                 C   s^   |d krd S t dD ]D}t| | d || g| | d< t| | d || g| | d< qd S )N   r   r   )r1   minmax)r.   vZaxisr   r   r   update_boundsl   s
     r<   c                 C   s   | |||    S r   r   )a_mina_maxZa_ratior   r   r   interpolatet   s    r?   c                 C   s$   ||  }|| krd}||  t | S )Ng      ?)r   )r=   r>   Za_valueZa_ranger   r   r   rinterpolatex   s    r@   c                    s   t  fddtdD S )Nc                 3   s"   | ]}t  | | V  qd S r   )r?   r)   color1color2ratior   r   r/      s     z$interpolate_color.<locals>.<genexpr>r8   r0   r1   rA   r   rA   r   interpolate_color   s    rF   c                 C   s   | | | S r   r   )r;   v_minv_lenr   r   r   scale_value   s    rI   c                    s.   t | t|  }|   fdd| D S )Nc                    s   g | ]}t | qS r   )rI   )r*   frH   rG   r   r   
<listcomp>   s     z$scale_value_list.<locals>.<listcomp>)r9   r:   )flistZv_maxr   rK   r   scale_value_list   s    rN   2   c           	   	      s    | }}t  | dk rg S ztt |  W n ttfk
rN   g  Y S X  |kr`td  }|  }t | dk rd} |8  ||7 }t|   }|r||krt||d S  g fddtd|d D  |g S )NgMbP?z"r_min cannot be greater than r_maxg        r   c                    s   g | ]} |  qS r   r   )r*   er_minstrider   r   rL      s     z!strided_range.<locals>.<listcomp>r   )absr1   int	TypeErrorOverflowError
ValueErrorstrided_range)	rR   Zr_maxrS   Z	max_stepsZo_minZo_maxZr_min_sZr_max_sZr_stepsr   rQ   r   rY      s&    

rY   c                 C   s~   t | tsd S i }| dD ]\}|d}t|dkrF|d d }}n"t|dkr\|\}}ntd|  | || < q|S )N;=r   r    r   z%Plot option string '%s' is malformed.)
isinstancestrsplitr2   rX   strip)soptionstokenpiecesoptionr    r   r   r   parse_option_string   s    


rf   c                    s   t  fddtdD S )Nc                 3   s   | ]} | |  V  qd S r   r   r)   Zv1Zv2r   r   r/      s     zdot_product.<locals>.<genexpr>r8   sumr1   rg   r   rg   r   dot_product   s    rj   c                    s   t  fddtdD S )Nc                 3   s   | ]} | |  V  qd S r   r   r)   rg   r   r   r/      s     zvec_sub.<locals>.<genexpr>r8   rE   rg   r   rg   r   vec_sub   s    rk   c                    s   t  fddtdD d S )Nc                 3   s   | ]} | d  V  qdS )r   Nr   r)   r;   r   r   r/      s     zvec_mag.<locals>.<genexpr>r8   g      ?rh   rl   r   rl   r   vec_mag   s    rm   )rO   )!ctypesr   r   r   ImportErrorZ	pyglet.glglr   Z
sympy.corer   ZglGetFloatvr   r   r   r   r   r   r'   r(   r3   r4   r7   r<   r?   r@   rF   rI   rN   rY   rf   rj   rk   rm   r   r   r   r   <module>   s6   					
