
j\c           @@ s  d  Z  d d l m Z d d l m Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l	 Z	 d d l
 Z
 d d l Z d d l m Z d d l m Z y d d l Z Wn2 e k
 r e j d' k  r   q d d l Z n Xd d l Z d d l Z d d l Z d d	 l m Z d d
 l m Z e e j  Z e e j d  d  Z e a e a  e Z! d   Z" e j d  d k	 Z$ e j d  d k	 Z% e j d  d k	 Z& e j d  d k	 Z' d   Z( d   Z) d   Z* e d  Z+ d d  Z, d   Z- e. e j/ d  sVd d( d     YZ0 d e0 f d     YZ1 d e1 f d     YZ2 n  d e j/ f d      YZ3 d! e4 f d"     YZ5 d# e4 f d$     YZ6 d% e3 f d&     YZ7 d S()   s$   Utilities for PyTables' test suites.i    (   t   print_function(   t   absolute_importN(   t   LooseVersion(   t   resource_filenamei   i   (   t   detect_number_of_cores(   t   min_blosc_bitshuffle_versiont   blosci   c         C@ sj   d |  k r" t  a |  j d  n  d |  k rD t a |  j d  n  d |  k rf t  a |  j d  n  |  S(   Nt   verboset   silents   --heavy(   t   TrueR   t   removet   Falset   heavy(   t   argv(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt
   parse_argv:   s    t   zlibt   lzot   bzip2c         C@ s/   |  r t  d  n
 t  d  t  d d  d  S(   Ns#   Performing the complete test suite!sQ  Performing only a light (yet comprehensive) subset of the test suite.
If you want a more complete test, try passing the --heavy flag to this script
(or set the 'heavy' parameter in case you are using tables.test() call).
The whole suite will take more than 4 hours to complete on a relatively
modern CPU and around 512 MB of main memory.s   -=i&   (   t   print(   R   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   print_heavyR   s
    c    	      C@ s  t  d d  t  d t j  t  d t j d  d  t  d t j  t j d  }  t j r t j   } t j	 d	 |  d
 } d | } n d } t  d t j | f  |  d& k	 r t  d |  d d f  n  t j d  }  |  d& k	 rt  d |  d |  d f  n  t j d  }  |  d& k	 rJt  d |  d |  d f  n  t j d  }  |  d& k	 r0|  d j   d } t  d |  d | f  t j   } g  t | j    D]  \ } } d | | d f ^ q} t  d d j |   d g } |  d t k r| j d  n  t  d d j |   n  y" d
 d l m } t  d |  Wn n Xt  d t j  t  d  t j    t  d! t j  t  d" t    t  d# t j    t  d$ t j    t  d% t j    t  d d  t j j   d& S('   s;   Print all the versions of software that PyTables relies on.s   -=i&   s   PyTables version:    %ss   HDF5 version:        %st   hdf5i   s   NumPy version:       %sR   s   [0-9.]+i    s   using VML/MKL %ss   not using Intel's VML/MKLs   Numexpr version:     %s (%s)s   Zlib version:        %s (%s)s   in Python interpreterR   s   LZO version:         %s (%s)i   R   s   BZIP2 version:       %s (%s)R   s   Blosc version:       %s (%s)s   %s (%s)s   Blosc compressors:   %ss   , t   shufflet
   bitshuffles   Blosc filters:       %s(   t   __version__s   Cython version:      %ss   Python version:      %ss   Platform:            %ss   Byte-ordering:       %ss   Detected cores:      %ss   Default encoding:    %ss   Default FS encoding: %ss   Default locale:      (%s, %s)N(   R   t   tablesR   t   which_lib_versiont   numpyt   numexprt   use_vmlt   get_vml_versiont   ret   findallt   Nonet   splitt   blosc_get_complib_infot   sortedt   itemst   joinR   t   appendt   Cythont   syst   versiont   platformt	   byteorderR   t   getdefaultencodingt   getfilesystemencodingt   localet   getdefaultlocalet   stdoutt   flush(	   t   tinfot   vml_versiont	   vml_availt
   blosc_datet   blosc_cinfot   kt   vt   blosc_finfot   cython_version(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   print_versions_   sZ    	9	c         C@ s   t  d |   S(   Ns   tables.tests(   R   (   t   filename(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   test_filename   s    c         C@ s1   t  s
 d S| r# t |  d d n
 t |   d S(   s4   Print out the `string` if verbose output is enabled.Nt   endt    (   R   R   (   t   stringt   nonl(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   verbosePrint   s
    R   c         C@ s  t  | d  s |  | k St  |  d  s8 |  j d k ra t  | d  sW | j d k ra |  | k S|  j | j k r t r t d |  j d | j  n  d St  | d  r |  j j d | j j d k r t r t d |  j d | j  n  d St |  j  d k rD|  d | d k rd St r=t d |  j d | j  n  d Sn  |  j d k r| j d k rfd St rt d  t d	 t |  j   t d
 t | j   n  d Sn  |  | k } t	 j
 |  } | rt rt d  n  | S(   s*   Checks if two numerical objects are equal.t   shapes   Shape is not equal:s   !=i    t   dtypei   s   dtype is not equal:s   length is not equals   len(a.data) ==>s   len(b.data) ==>s,   Some of the elements in arrays are not equal(    (    (    (    (   t   hasattrRC   R   R   RD   t   strt   lent   sizet   dataR   t   all(   t   at   bt   flavort   result(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   allequal   s@    

/
c         C@ sn   t  |   } t  |  } t |  d  r9 |  j | j k pT t | |  pT t | |  s[ t St j |  | k  S(   s   Are both `arr1` and `arr2` equal arrays?

    Arguments can be regular NumPy arrays, chararray arrays or
    structured arrays (including structured record arrays). They are
    checked for type and value equality.

    RD   (   t   typeRE   RD   t
   issubclassR   R   RJ   (   t   arr1t   arr2t   t1t   t2(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   areArraysEqual   s    	!t   assertWarnst   _BaseTestCaseContextc           B@ s   e  Z d    Z d   Z RS(   c         C@ s   | |  _  d  S(   N(   t	   test_case(   t   selfRY   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   __init__   s    c         C@ s.   |  j  j |  j |  } |  j  j |   d  S(   N(   RY   t   _formatMessaget   msgt   failureException(   RZ   t   standardMsgR]   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   _raiseFailure   s    (   t   __name__t
   __module__R[   R`   (    (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyRX      s   	t   _AssertRaisesBaseContextc           B@ s    e  Z d d d   Z d   Z RS(   c         C@ s   t  j |  |  | |  _ | |  _ | d  k	 rd y | j |  _ Wqm t k
 r` t |  |  _ qm Xn	 d  |  _ | d  k	 r t	 j
 |  } n  | |  _ d  |  _ d  S(   N(   RX   R[   t   expectedRY   R    Ra   t   obj_namet   AttributeErrorRF   R   t   compilet   expected_regexR]   (   RZ   Rd   RY   t   callable_objRh   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyR[      s    				c         C@ sC   | d k r% | j d d  |  _ |  S|   | | |   Wd QXd S(   s   
            If callable_obj is None, assertRaises/Warns is being used as a
            context manager, so check for a 'msg' kwarg and return self.
            If callable_obj is not None, call it passing args and kwargs.
            R]   N(   R    t   popR]   (   RZ   t   nameRi   t   argst   kwargs(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   handle  s
    N(   Ra   Rb   R    R[   Rn   (    (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyRc      s   t   _AssertWarnsContextc           B@ s   e  Z d    Z d   Z RS(   c         C@ s|   x; t  t j j    D]$ } t | d d   r i  | _ q q Wt j d t	  |  _
 |  j
 j   |  _ t j d |  j  |  S(   Nt   __warningregistry__t   recordt   always(   t   listR(   t   modulest   valuest   getattrR    Rp   t   warningst   catch_warningsR	   t   warnings_managert	   __enter__t   simplefilterRd   (   RZ   R8   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyRz     s    c         C@ so  |  j  j | | |  | d  k	 r& d  Sy |  j j } Wn  t k
 rX t |  j  } n Xd  } x |  j D] } | j } t	 | |  j  s qi n  | d  k r | } n  |  j
 d  k	 r |  j
 j t |   r qi n  | |  _ | j |  _ | j |  _ d  SW| d  k	 r-|  j d j |  j
 j t |    n  |  j rU|  j d j | |  j   n |  j d j |   d  S(   Ns   "{0}" does not match "{1}"s   {0} not triggered by {1}s   {0} not triggered(   Ry   t   __exit__R    Rd   Ra   Rf   RF   Rw   t   messaget
   isinstanceRh   t   searcht   warningR<   t   linenoR`   t   formatt   patternRe   (   RZ   t   exc_typet	   exc_valuet   tbt   exc_namet   first_matchingt   mt   w(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyR|   #  s:    				(   Ra   Rb   Rz   R|   (    (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyRo     s   		t   PyTablesTestCasec           B@ se   e  Z d    Z d   Z d   Z d   Z e e j d  sK d d  Z
 n  e d  Z e d  Z RS(	   c         C@ sT   t  t |   j   x: |  j D]/ } |  j | j j d k r d  |  j | <q q Wd  S(   Nt   instancemethod(   t   superR   t   tearDownt   __dict__t	   __class__Ra   R    (   RZ   t   key(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyR   H  s    c         C@ s   |  j    j d  d S(   s   Get the name of this test case.t   .i(   t   idR!   (   RZ   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   _getNameN  s    c         C@ s   |  j    j d  d S(   s>   Get the name of the method currently running in the test case.R   i(   R   R!   (   RZ   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   _getMethodNameR  s    c         C@ sS   t  rO |  j   } |  j   } d | | f } t d | d t |  f  n  d S(   s;   Print a nice header for the current test method if verbose.s   Running %s.%ss   %s
%st   -N(   R   R   R   R   RG   (   RZ   Rk   t
   methodNamet   title(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   _verboseHeaderV  s
    RW   c         O@ s(   t  | |  |  } | j d | | |  S(   NRW   (   Ro   Rn   (   RZ   t   expected_warningRi   Rl   Rm   t   context(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyRW   b  s    c         C@ s   t  r# t d |  t d |  n  | rH |  j | j | j k d  n |  j | j | j k d  |  j | j | j k d  d  S(   Ns   Group 1:s   Group 2:s(   node1 and node2 have the same pathnames.s1   node1 and node2 does not have the same pathnames.s0   node1 and node2 does not have the same children.(   R   R   t
   assertTruet   _v_pathnamet   _v_children(   RZ   t   node1t   node2t   hardlink(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   _checkEqualityGroupg  s    
c         C@ s   t  r# t d |  t d |  n  | rH |  j | j | j k d  n |  j | j | j k d  |  j t | |  d  d  S(   Ns   Leaf 1:s   Leaf 2:s(   node1 and node2 have the same pathnames.s1   node1 and node2 does not have the same pathnames.s.   node1 and node2 does not have the same values.(   R   R   R   R   RV   (   RZ   R   R   R   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   _checkEqualityLeafw  s    
N(   Ra   Rb   R   R   R   R   RE   t   unittestt   TestCaseR    RW   R   R   R   (    (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyR   G  s   				t   TestFileMixinc           B@ s&   e  Z d Z i  Z d    Z d   Z RS(   c         C@ s>   t  t |   j   t j |  j d |  j   |  j |  _ d  S(   NR   (	   R   R   t   setUpR   t	   open_filet   h5fnameR   t   open_kwargst   h5file(   RZ   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyR     s    c         C@ s$   |  j  j   t t |   j   d S(   s   Close ``h5file``.N(   R   t   closeR   R   R   (   RZ   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyR     s    N(   Ra   Rb   R    R   R   R   R   (    (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyR     s   	t   TempFileMixinc           B@ s;   e  Z d  Z i  Z d   Z d   Z d   Z d d  Z RS(   R   c         C@ s   t  j d |  j   d d  S(   Nt   prefixt   suffixs   .h5(   t   tempfilet   mktempR   (   RZ   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   _getTempFileName  s    c         C@ sS   t  t |   j   |  j   |  _ t j |  j |  j d |  j   |  j	 |  _
 d S(   s   Set ``h5file`` and ``h5fname`` instance attributes.

        * ``h5fname``: the name of the temporary HDF5 file.
        * ``h5file``: the writable, empty, temporary HDF5 file.

        R   N(   R   R   R   R   R   R   R   t	   open_modeR   R   R   (   RZ   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyR     s
    c         C@ s=   |  j  j   d |  _  t j |  j  t t |   j   d S(   s(   Close ``h5file`` and remove ``h5fname``.N(	   R   R   R    t   osR
   R   R   R   R   (   RZ   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyR     s    	t   rc         K@ s,   |  j  j   t j |  j | |  |  _  t S(   s   Reopen ``h5file`` in the specified ``mode``.

        Returns a true or false value depending on whether the file was
        reopenend or not.  If not, nothing is changed.

        (   R   R   R   R   R   R	   (   RZ   t   modeRm   (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   _reopen  s    (   Ra   Rb   R   R   R   R   R   R   (    (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyR     s   			t   ShowMemTimec           B@ s   e  Z e j   Z d    Z RS(   c         C@ su  xt  d  D] } | j d  r; t | j   d  } q | j d  rc t | j   d  } q | j d  r t | j   d  } q | j d  r t | j   d  } q | j d  r t | j   d  } q | j d  r t | j   d  } q q Wt d	 t j   |  j  t d
 |  j    t d | | f  t d | | f  t d | | f  d S(   s$   Showing memory and time consumption.s   /proc/self/statuss   VmSize:i   s   VmRSS:s   VmData:s   VmStk:s   VmExe:s   VmLib:s   
WallClock time:s    Memory usage: ******* %s *******s   VmSize: %7s kB	VmRSS: %7s kBs   VmData: %7s kB	VmStk: %7s kBs   VmExe:  %7s kB	VmLib: %7s kBN(   t   opent
   startswitht   intR!   R   t   timet   trefR   (   RZ   t   linet   vmsizet   vmrsst   vmdatat   vmstkt   vmexet   vmlib(    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   test00  s$    (   Ra   Rb   R   R   R   (    (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyR     s   (   i   i   (    (8   t   __doc__t
   __future__R    R   R   R   R(   R   R.   R*   R   Rw   t   distutils.versionR   t   pkg_resourcesR   t	   unittest2R   t   ImportErrort   version_infoR   R   R   t   tables.utilsR   t   tables.req_versionsR   t   hdf5_versionR   t   blosc_versionR   R   R   t   show_memoryR   R    t
   zlib_availt	   lzo_availt   bzip2_availt   blosc_availR   R;   R=   RB   RO   RV   RE   R   RX   Rc   Ro   R   t   objectR   R   R   (    (    (    s2   lib/python2.7/site-packages/tables/tests/common.pyt   <module>   s^   			;	
5	.A*