ó
\K]c           @   s  d  d l  m Z d  d l m Z d  d l Z d  d l m Z m Z d  d l	 m
 Z
 m Z m Z d  d l m Z e d ƒ d e e
 j f d	 „  ƒ  Yƒ Z e d
 ƒ d e e
 j f d „  ƒ  Yƒ Z d e e
 j f d „  ƒ  YZ e d ƒ d e e
 j f d „  ƒ  Yƒ Z e d k re
 j ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   contextmanagerN(   t   cudat   config(   t   unittestt   skip_on_cudasimt   SerialMixin(   t   captured_stderrs   not supported on CUDASIMt   TestDeallocationc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s©   t  j ƒ  j } | j ƒ  |  j t | ƒ d ƒ xG t t j ƒ D]6 } t  j	 t
 j d ƒ ƒ |  j t | ƒ | d ƒ q? Wt  j	 t
 j d ƒ ƒ |  j t | ƒ d ƒ d  S(   Ni    i   (   R   t   current_contextt   deallocationst   cleart   assertEqualt   lent   rangeR   t   CUDA_DEALLOCS_COUNTt	   to_devicet   npt   arange(   t   selft   deallocst   i(    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   test_max_pending_count   s    
c         C   s;  t  j ƒ  } | j } | j ƒ  |  j t | ƒ d ƒ | j ƒ  } d } t j } zÚ | | j	 t _ |  j
 | j | d d ƒt  j t j | d d t j ƒƒ |  j t | ƒ d ƒ t  j t j | j | j d t j ƒƒ |  j t | ƒ d ƒ t  j t j d d t j ƒƒ |  j t | ƒ d ƒ Wd  | t _ Xd  S(	   Ni    i
   i   t   deltai   i   t   dtypei@B (   R   R	   R
   R   R   R   t   get_memory_infoR   t   CUDA_DEALLOCS_RATIOt   totalt   assertAlmostEqualt   _max_pending_bytesR   R   t   onest   int8t   _size(   R   t   ctxR   t   mit   max_pendingt	   old_ratio(    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   test_max_pending_bytes   s"    	
	#)(   t   __name__t
   __module__R   R%   (    (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyR      s   	s&   defer_cleanup has no effect in CUDASIMt   TestDeferCleanupc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   så   t  j d ƒ } t j | ƒ } t j ƒ  j } | j ƒ  |  j t | ƒ d ƒ t j	 ƒ  f t j | ƒ } ~ |  j t | ƒ d ƒ ~ |  j t | ƒ d ƒ | j ƒ  |  j t | ƒ d ƒ Wd  QX| j ƒ  |  j t | ƒ d ƒ d  S(   Ni   i    i   i   (
   R   R   R   R   R	   R
   R   R   R   t   defer_cleanup(   R   t   harrt   darr1R   t   darr2(    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt
   test_basicA   s    


c         C   s  t  j d ƒ } t j | ƒ } t j ƒ  j } | j ƒ  |  j t | ƒ d ƒ t j	 ƒ  ™ t j	 ƒ  f t j | ƒ } ~ |  j t | ƒ d ƒ ~ |  j t | ƒ d ƒ | j ƒ  |  j t | ƒ d ƒ Wd  QX| j ƒ  |  j t | ƒ d ƒ Wd  QX| j ƒ  |  j t | ƒ d ƒ d  S(   Ni   i    i   i   (
   R   R   R   R   R	   R
   R   R   R   R)   (   R   R*   R+   R   R,   (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   test_nestedS   s$    



c         C   s7  t  j d ƒ } t j | ƒ } t j ƒ  j } | j ƒ  |  j t | ƒ d ƒ d t	 f d „  ƒ  Y} |  j
 | ƒ f t j ƒ  S t j | ƒ } ~ |  j t | ƒ d ƒ | j ƒ  |  j t | ƒ d ƒ | ‚ Wd  QXWd  QX| j ƒ  |  j t | ƒ d ƒ ~ |  j t | ƒ d ƒ | j ƒ  |  j t | ƒ d ƒ d  S(   Ni   i    t   CustomErrorc           B   s   e  Z RS(    (   R&   R'   (    (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyR/   o   s   i   (   R   R   R   R   R	   R
   R   R   R   t	   Exceptiont   assertRaisesR)   (   R   R*   R+   R   R/   R,   (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   test_exceptionh   s(    



(   R&   R'   R-   R.   R2   (    (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyR(   ?   s   		t   TestDeferCleanupAvailc           B   s   e  Z d  „  Z RS(   c         C   s   t  j ƒ   Wd  QXd  S(   N(   R   R)   (   R   (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   test_context_managerƒ   s    (   R&   R'   R4   (    (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyR3   ‚   s   t   TestDelc           B   s\   e  Z d  Z e d „  ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z RS(	   sJ   
    Ensure resources are deleted properly without ignored exception.
    c         c   s;   t  ƒ   } d  V| j j ƒ  Wd  QX|  j | j ƒ  ƒ d  S(   N(   R   R
   R   t   assertFalset   getvalue(   R   R!   t   cap(    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   check_ignored_exceptionŽ   s    c         C   s5   t  j ƒ  } | j ƒ  } |  j | ƒ  ~ Wd  QXd  S(   N(   R   R	   t   create_streamR9   (   R   R!   t   stream(    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   test_stream•   s    c         C   s5   t  j ƒ  } | j ƒ  } |  j | ƒ  ~ Wd  QXd  S(   N(   R   R	   t   create_eventR9   (   R   R!   t   event(    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt
   test_event›   s    c         C   s8   t  j ƒ  } | j d ƒ } |  j | ƒ  ~ Wd  QXd  S(   Ni    (   R   R	   t   memhostallocR9   (   R   R!   t   mem(    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   test_pinned_memory¡   s    c         C   s>   t  j ƒ  } | j d d t ƒ} |  j | ƒ  ~ Wd  QXd  S(   Ni    t   mapped(   R   R	   R@   t   TrueR9   (   R   R!   RA   (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   test_mapped_memory§   s    c         C   s8   t  j ƒ  } | j d ƒ } |  j | ƒ  ~ Wd  QXd  S(   Ni    (   R   R	   t   memallocR9   (   R   R!   RA   (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   test_device_memory­   s    c         C   s  d t  f d „  ƒ  Y} t j d ƒ } t j ƒ  } | j j ƒ  |  j | ƒ º t j | ƒ  Wd  QXt j | ƒ  Wd  QXt j	 ƒ  1 t j | ƒ  Wd  QXt j | ƒ  Wd  QXWd  QXy  t j | ƒ  | ‚ Wd  QXWn' | k
 rt j | ƒ  Wd  QXn XWd  QXd  S(   Nt   PinnedExceptionc           B   s   e  Z RS(    (   R&   R'   (    (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyRH   ¶   s   i   (
   R0   R   t   zerosR   R	   R
   R   R9   t   pinnedR)   (   R   RH   t   arrR!   (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   test_pinned_contextmanager³   s(    c         C   s  d t  f d „  ƒ  Y} t j d ƒ } t j ƒ  } | j j ƒ  |  j | ƒ Æ t j | ƒ  } Wd  QXt j | ƒ  } Wd  QXt j	 ƒ  5 t j | ƒ  } Wd  QXt j | ƒ  } Wd  QXWd  QXy" t j | ƒ  } | ‚ Wd  QXWn) | k
 rt j | ƒ  } Wd  QXn XWd  QXd  S(   Nt   MappedExceptionc           B   s   e  Z RS(    (   R&   R'   (    (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyRM   Ò   s   i   (
   R0   R   RI   R   R	   R
   R   R9   RC   R)   (   R   RM   RK   R!   t   marr(    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   test_mapped_contextmanagerÏ   s(    (   R&   R'   t   __doc__R   R9   R<   R?   RB   RE   RG   RL   RO   (    (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyR5   ‰   s   						t   __main__(   t
   __future__R    t
   contextlibR   t   numpyR   t   numbaR   R   t   numba.cuda.testingR   R   R   t   numba.tests.supportR   t   TestCaseR   R(   R3   R5   R&   t   main(    (    (    sJ   lib/python2.7/site-packages/numba/cuda/tests/cudadrv/test_deallocations.pyt   <module>   s   2Ba