U
    hâËd·  ã                   @   sT   d Z ddlmZmZ ddlmZ ddlmZ edd„ ƒZedd„ ƒZ	ed	d
„ ƒZ
dS )z? This module provides the unsafe things for targets/numbers.py
é    )ÚtypesÚerrors)Ú	intrinsic)Úirc                    sx   |j }t|jtjƒr t |¡‰ n4t|jtjƒrH|dkr>t ¡ nt 	¡ ‰ ndsTt
dƒ‚‡ fdd„}|j}|||ƒ}||fS )z4 Bitcast a scalar 'val' to the given type 'viewty'. é    r   Zunreachablec                    s   |d }|  |ˆ ¡S )Nr   )Zbitcast)ZcgctxÚbuilderÚtypÚargsZflt©Z	bitcastty© úU/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/cpython/unsafe/numbers.pyÚcodegen   s    zviewer.<locals>.codegen)ZbitwidthÚ
isinstanceZdtyper   ÚIntegerr   ÚIntTypeÚFloatZ	FloatTypeZ
DoubleTypeÚAssertionError)ZtyctxÚvalZviewtyÚbitsr   ZrettyÚsigr   r
   r   Úviewer	   s    
r   c                 C   s6   t |tjƒs"d|› d�}t |¡‚dd„ }||ƒ|fS )zACounts trailing zeros in the binary representation of an integer.zCtrailing_zeros is only defined for integers, but value passed was 'ú'.c                 S   s    |\}|  |t t d¡d¡¡S ©Né   r   )Zcttzr   ÚConstantr   ©Úcontextr   Ú	signaturer	   Úsrcr   r   r   r   $   s    ztrailing_zeros.<locals>.codegen©r   r   r   r   ZNumbaTypeError©Z
typeingctxr   Úmsgr   r   r   r   Útrailing_zeros   s
    
r"   c                 C   s6   t |tjƒs"d|› d�}t |¡‚dd„ }||ƒ|fS )z@Counts leading zeros in the binary representation of an integer.zBleading_zeros is only defined for integers, but value passed was 'r   c                 S   s    |\}|  |t t d¡d¡¡S r   )Zctlzr   r   r   r   r   r   r   r   2   s    zleading_zeros.<locals>.codegenr   r    r   r   r   Úleading_zeros*   s
    
r#   N)Ú__doc__Z
numba.corer   r   Znumba.core.extendingr   Zllvmliter   r   r"   r#   r   r   r   r   Ú<module>   s   

