U
    #c                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlm  mZ	 d dl
mZmZ eejjZeejjZdZdd d Ze ZdZdd	 ed
D dd	 ed
D  dd	 edd
D  dd	 edd
D  dd	 edd
D  eedd Zdd	 ed
D dd	 ed
D  dd	 edd
D  dd	 edd
D  dd	 edd
D  eedd dg Zdd	 eD Zej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'ej(j)d/d0 Z*d1d2 Z+d3d4 Z,dS )5    N)assert_raisesassert_equall                 l            c                 C   s   g | ]}t | qS  )	INT64_MIN.0jr   r   C/tmp/pip-unpacked-wheel-b2rbor69/numpy/core/tests/test_extint128.py
<listcomp>   s     r      c                 C   s   g | ]}t | qS r   )	INT64_MAXr	   r   r   r   r      s     c                 C   s   g | ]}t | qS r   	INT64_MIDr	   r   r   r   r      s     ic                 C   s   g | ]}d t  | qS r   r   r	   r   r   r   r      s     c                 C   s   g | ]}t d  | qS r   r   r	   r   r   r   r      s     iF   c                 C   s   g | ]}t | qS r   )
INT128_MINr	   r   r   r   r      s     c                 C   s   g | ]}t | qS r   )
INT128_MAXr	   r   r   r   r       s     c                 C   s   g | ]}t | qS r   
INT128_MIDr	   r   r   r   r   !   s     c                 C   s   g | ]}d t  | qS r   r   r	   r   r   r   r   "   s     c                 C   s   g | ]}t d  | qS r   r   r	   r   r   r   r   #   s     Fc                 C   s   g | ]}|d kr|qS )r   r   )r
   xr   r   r   r   (   s      c                  '   sb   dg fdd}z| V  W n< t k
r\   ddl}dtd | f }t|Y nX dS )z}
    Iterate over Cartesian product of *args, and if an exception is raised,
    add information of the current iterate.
    Nc                  3   s"   t j  D ]} | d< | V  q
d S Nr   )	itertoolsproduct)vargsvaluer   r   iterate4   s    zexc_iter.<locals>.iterater   z	At: %r
%s)	Exception	tracebackrepr
format_excAssertionError)r   r    r"   msgr   r   r   exc_iter+   s    r'   c            	   	   C   s   t jdft jdft jdfg} t| ttr}|D ]f\}}}|\}}|||}t|  kr^tkstn tt	t
j||| q.t
|||}||kr.t|| q.W 5 Q R X d S )Nr   r      )operatoraddsubmulr'   INT64_VALUESr   r   r   OverflowErrormtZextint_safe_binopr   )	opsitZxopabZpyopopcdr   r   r   test_safe_binopB   s    
r7   c               	   C   s@   t t.} | D ]"\}t|}||krt|| qW 5 Q R X d S N)r'   r-   r/   Zextint_to_128r   r1   r2   r3   r   r   r   test_to_128Y   s
    


r:   c               	   C   sf   t tT} | D ]H\}t|  kr(tks:n tttj| qt|}||krt|| qW 5 Q R X d S r8   )	r'   INT128_VALUESr   r   r   r.   r/   Zextint_to_64r   r9   r   r   r   
test_to_64a   s    


r<   c               	   C   sN   t tt:} | D ].\}}|| }t||}||krt|| qW 5 Q R X d S r8   )r'   r-   r/   Zextint_mul_64_64r   r1   r2   r3   r5   r6   r   r   r   test_mul_64_64l   s    r>   c               	   C   sv   t ttb} | D ]V\}}|| }t|  kr4tksHn tttj|| qt||}||krt|| qW 5 Q R X d S r8   )	r'   r;   r   r   r   r.   r/   Zextint_add_128r   r=   r   r   r   test_add_128u   s    r?   c               	   C   sv   t ttb} | D ]V\}}|| }t|  kr4tksHn tttj|| qt||}||krt|| qW 5 Q R X d S r8   )	r'   r;   r   r   r   r.   r/   Zextint_sub_128r   r=   r   r   r   test_sub_128   s    r@   c               	   C   sF   t t4} | D ](\}| }t|}||krt|| qW 5 Q R X d S r8   )r'   r;   r/   Zextint_neg_128r   r1   r2   r3   r5   r   r   r   test_neg_128   s    


rB   c               	   C   sv   t td} | D ]X\}|dk r6| d> dd d @  }n|d> dd d @ }t|}||krt|| qW 5 Q R X d S )Nr   r   r   r   )r'   r;   r/   Zextint_shl_128r   rA   r   r   r   test_shl_128   s    


rC   c               	   C   s^   t tL} | D ]@\}|dk r*| d?  }n|d? }t|}||krt|| qW 5 Q R X d S )Nr   r   )r'   r;   r/   Zextint_shr_128r   rA   r   r   r   test_shr_128   s    


rD   c               	   C   sN   t tt:} | D ].\}}||k}t||}||krt|| qW 5 Q R X d S r8   )r'   r;   r/   Zextint_gt_128r   r=   r   r   r   test_gt_128   s    rE   c               	   C   s   t tt} | D ]\}}|dkr0t||\}}nt| |\}}| }| }t||\}}||ks|||ks||| | |krt|| t|| t|| | | qW 5 Q R X d S r   )r'   r;   INT64_POS_VALUESdivmodr/   Zextint_divmod_128_64r   )r1   r2   r3   r5   Zcrr6   Zdrr   r   r   test_divmod_128_64   s     

rH   c               	   C   sN   t tt:} | D ].\}}|| }t||}||krt|| qW 5 Q R X d S r8   )r'   r;   rF   r/   Zextint_floordiv_128_64r   r=   r   r   r   test_floordiv_128_64   s    rI   c               	   C   sV   t ttB} | D ]6\}}|| d | }t||}||krt|| qW 5 Q R X d S )Nr   )r'   r;   rF   r/   Zextint_ceildiv_128_64r   r=   r   r   r   test_ceildiv_128_64   s    rJ   )-r   
contextlibr)   ZpytestZnumpynpZnumpy.core._multiarray_testscoreZ_multiarray_testsr/   Znumpy.testingr   r   ZiinfoZint64maxr   minr   r   r   r   r   rangelistr-   r;   rF   contextmanagerr'   r7   r:   r<   r>   r?   r@   rB   rC   rD   rE   markZslowrH   rI   rJ   r   r   r   r   <module>   sn   


			

