a
    ij                  
   @   s
  d Z dZddlmZ ddlmZ ddlmZ ddlZddl	m
Z
mZ d ZZG dd	 d	ejZeejejfeejejfe
ejejfiZed
d ejD Zedd ejD aedd ejD Zedd ejD Zz[[W n& ey Z zW Y dZ[n
dZ[0 0 dS )z3Numbers passed as array handling code for PyOpenGL
numbers    )_types)GL_1_1)formathandlerN)longinteger_typesc                   @   s   e Zd ZdZeeejejej	ej
ejejejejejf
 ZdddZeZdddZdddZd	d
 ZdddZdddZdddZdd ZdS )NumberHandlerzKAllows the user to pass a bald Python float,int, etceteras as an array-of-1Nc              
   C   sF   zt |W S  ty@ } z| jd7  _ W Y d}~n
d}~0 0 dS )z5If it's a ctypes value, pass on, otherwise do asArray)z^ If you have ERROR_ON_COPY enabled, remember to pass in an array to array-requiring functions.N)ctypesZbyref	TypeErrorargs)selfvaluetypeCodeerr r   S/home/ghrups/robot-bench/.venv/lib/python3.9/site-packages/OpenGL/arrays/numbers.py
from_param   s
    zNumberHandler.from_paramc                 C   s   t ddS z-Currently don't allow Number as output types!z6Number data-type not allowed as an output array formatNNotImplementedErrorr   dimsr   r   r   r   zeros*   s    zNumberHandler.zerosc                 C   s   t ddS r   r   r   r   r   r   ones0   s    zNumberHandler.onesc                 C   sD   |j tv rt|j  S t|j }|dur0|d S tdt| dS )z=Given a value, guess OpenGL type of the corresponding pointerN   z(Can't guess array data-type for %r types)	__class__TARGET_TYPESDEFAULT_TYPESgetr
   type)r   r   guessr   r   r   arrayToGLType6   s    


zNumberHandler.arrayToGLTypec                 C   s   dS )z9Given a data-value, calculate ravelled size for the arrayr   r   r   r   r   r   r   r   	arraySizeB   s    zNumberHandler.arraySizec                 C   s:   |j tv r|S t|}|dur(||S td|f dS )z7Convert given value to an array value of given typeCodeNz-Don't know how to convert %r to an array type)r   r   CONSTANT_TO_TYPEr   r
   )r   r   r   Z
targetTyper   r   r   asArrayF   s    

zNumberHandler.asArrayc                 C   s   dS )z-Determine unit size of an array (if possible)r   r   r"   r   r   r   unitSizeR   s    zNumberHandler.unitSizec                 C   s:   t ttfD ]}||v r
|| ||< q
|tv r6t|f adS )z2Register a sub-class for handling as the base-typeN)r   r   
BYTE_SIZESTARGET_TYPE_TUPLE)r   typbasesourcer   r   r   registerEquivalentV   s
    z NumberHandler.registerEquivalent)N)N)N)N)N)N)__name__
__module____qualname____doc__r   floatr   GLdoubleZGLfloatGLintZGLshortZGLuintZGLulongZGLushortZGLclampfZGLclampdZHANDLED_TYPESr   ZdataPointerr   r   r!   r#   r%   r&   r,   r   r   r   r   r      s,   






r   c                 C   s   g | ]\}}t t||fqS r   getattrr   .0ncr   r   r   
<listcomp>f       r:   c                 C   s   g | ]\}}t t|qS r   r4   r6   r   r   r   r:   i   r;   c                 C   s   g | ]\}}|t t|fqS r   r4   r6   r   r   r   r:   l   r;   c                 C   s$   g | ]\}}|t tt|fqS r   )r	   Zsizeofr5   r   r6   r   r   r   r:   p   r;   ) r0   ZREGISTRY_NAMEZOpenGL.raw.GLr   ZOpenGL.raw.GL.VERSIONr   ZOpenGL.arraysr   r	   ZOpenGL._bytesr   r   r8   r9   ZFormatHandlerr   r1   r2   Z	GL_DOUBLEintr3   ZGL_INTr   dictZARRAY_TYPE_TO_CONSTANTr   tupler(   r$   r'   	NameErrorr   r   r   r   r   <module>   s8   S