a
    <b                     @   s
  zd dl mZmZmZ W n ey*   Y n0 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   n/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/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       zvec_subs.<locals>.<genexpr>)tuplerangelenr,   r   r,   r   vec_subsI   s    r4   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    r5   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    r8   c                 C   s^   |d u rd S t dD ]D}t| | d || g| | d< t| | d || g| | d< qd S )N   r   r   )r2   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    rA   c                    s   t  fddtdD S )Nc                 3   s"   | ]}t  | | V  qd S r   )r@   r)   Zcolor1Zcolor2Zratior   r   r/      r0   z$interpolate_color.<locals>.<genexpr>r9   r1   r2   rB   r   rB   r   interpolate_color   s    rD   c                 C   s   | | | S r   r   )r<   v_minv_lenr   r   r   scale_value   s    rG   c                    s2   t | t|  }|  t fdd| D S )Nc                 3   s   | ]}t | V  qd S r   )rG   )r*   frF   rE   r   r   r/      r0   z#scale_value_list.<locals>.<genexpr>)r:   r;   list)flistZv_maxr   rI   r   scale_value_list   s    rL   2   c           	   	      s    | }}t  | dk rg S ztt |  W n ttfyL   g  Y S 0  |kr^td  }|  }t | dk rd} |8  ||7 }t|   }|r||krt||d S  gt fddtd|d D  |g S )NgMbP?z"r_min cannot be greater than r_maxg        r   c                 3   s   | ]} |  V  qd S r   r   )r*   er_minstrider   r   r/      r0   z strided_range.<locals>.<genexpr>r   )absr2   int	TypeErrorOverflowError
ValueErrorstrided_rangerJ   )	rP   Zr_maxrQ   Z	max_stepsZo_minZo_maxZr_min_sZr_max_sZr_stepsr   rO   r   rW      s&    

rW   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splitr3   rV   strip)soptionstokenpiecesoptionr    r   r   r   parse_option_string   s    


rd   c                    s   t  fddtdD S )Nc                 3   s   | ]} | |  V  qd S r   r   r)   v1v2r   r   r/      r0   zdot_product.<locals>.<genexpr>r9   sumr2   re   r   re   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)   re   r   r   r/      r0   zvec_sub.<locals>.<genexpr>r9   rC   re   r   re   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/      r0   zvec_mag.<locals>.<genexpr>r9   g      ?rh   rl   r   rl   r   vec_mag   s    rm   )rM   )!ctypesr   r   r   ImportErrorZ	pyglet.glglr   Z
sympy.corer   ZglGetFloatvr   r   r   r   r   r   r'   r(   r4   r5   r8   r=   r@   rA   rD   rG   rL   rW   rd   rj   rk   rm   r   r   r   r   <module>   s6   					
