<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

$YfQ                @   s  e  d  k r e d   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 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 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 y d d l Z d d l  Z  Wn e k
 rd Z d Z  Yn Xy d d l! Z" Wn e k
 rd Z" Yn Xy d d l# Z# Wn e k
 rd Z# Yn Xy d d l$ Z$ Wn e k
 rd Z$ Yn Xy d d l% Z% Wn e k
 r8d Z% Yn Xy d d l& Z& Wn e k
 rcd Z& Yn Xy d d l' Z' Wn e k
 rd Z' Yn Xd d d d d d	 d
 d d d d d d d d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS dT gQ Z( GdU d	   d	 e)  Z* GdV d
   d
 e*  Z+ GdW d   d e j,  Z- e j. dX dY dZ   Z/ d[ d\ f  d] d Z0 d^ d_   Z1 d` da   Z2 db d8   Z3 dc d9   Z4 f  f  d[ dd d  Z5 de d4   Z6 df Z7 d Z8 d a9 d a: d[ Z; d a< d a= dg d   Z> dh d   Z? di d   Z@ dj dk   ZA e j jB dl  rd[ dm dn  ZC do dp   ZD dq dr   ZE ds dt   ZF n e jG ZD e jH ZE du dt   ZF dv d   ZG dw dx   ZH dy d   ZI dz d{   ZJ d| d   ZK d} d~   ZL d d   ZM d d d   ZN d d   ZO d d!   ZP d d"   ZQ d d#   ZR d ZS d ZT e jU e jV d d@  ZW eS d dA  ZX d d   ZY eY   ZZ d d   Z[ d:Z\ d=Z] e j^ e_ j` d  jB d  d  Za e j^ e# d  Zb e j^ e$ d  Zc e j^ e% d  Zd e j^ e& d  Ze e j jB d  Zf e jg d k rd Zh n d Zh d ji eh e jj    Zh d Zk xD d>D]< Zl y e jm e jn el   Wn eo k
 rYqXel Zk PqWeh d Zp e j d k r6d d lq Zq eq jr d ep  Zp e js   Zt d Zu e jg d?k re jv   j d k reh d Zu y eu jw et  Wn ex k
 rYqXey d eu et f  d Zu nK e j d k ry d jz et  Wn( e{ k
 reh d jz et d  Zu Yn Xd Z| xH d@D]@ Zg y eg jz et  Wqe{ k
 rPe jn eh  eg Z| PYqXqWek rleh d ek Z} n d Z} e j~   Z e j. d d[ d d   Z e j. d[ d d   Z e j. d d[ d d   Z e e d  re j. d dC    Z e j j e j j e   Z e j j e  Z e j j e d  Z d d d  Z d d   Z d dS   Z d d   Z d d d d d d$  Z d dB   Z Gd d   d e  Z d[ d d  Z e j. d dJ    Z e j. d dK    Z Gd d   d e  Z Gd dL   dL e j j  Z Gd d   d e  Z Gd d%   d% e  Z e e d e j Z e e d e j Z e e d e j Z e j. d d d f  d d)   Z e j. d d    Z d d   Z d d   Z d d   Z d d   Z e j. d d    Z d d   Z d Z d Z e e d  r*d e Z d Z e d Z d d   Z d d   Z dAZ dBZ d d   Z d dM   Z d dT   Z dCZ d e Z d e Z d e Z e j Z d dQ   Z Gd d   d  Z dX d d1  Z d d2   Z Gd d*   d*  Z d d   Z d d   Z d d3   Z d d d  Z d a 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   oe j dk oe j d Z e j d k	 oe Z e j^ e d Z d d dd,  Z dd  Z dd  Z ddF   Z ddG   Z ddH   Z ddD   Z e j. d ddI   Z e j. ddO    Z e j. d dN    Z d!d"  Z e j e e d# d$ Z d%d&  Z Gd'dE   dE e j j  Z Gd(dP   dP e  Z d a d)d   Z d*d-   Z d a d+d,  Z d-d6   Z d.d   Z d/f  d0d:  Z Gd1dR   dR  Z d2d3  Z d4d5  Z f  d6d7 Z d S(D  ztest.supportz.support must be imported from the test package    NPIPE_MAX_SIZEverbose
max_memuseuse_resourcesfailfastError
TestFailedResourceDeniedimport_moduleimport_fresh_moduleCleanImportunloadforgetrecord_original_stdoutget_original_stdoutcaptured_stdoutcaptured_stdincaptured_stderrTESTFNSAVEDCWDunlinkrmtreetemp_cwdfindfilecreate_empty_filecan_symlinkfs_is_case_insensitiveis_resource_enabledrequiresrequires_freebsd_versionrequires_linux_versionrequires_mac_vercheck_syntax_errorTransientResourcetime_outsocket_peer_resetioerror_peer_resettransient_internetBasicTestRunnerrun_unittestrun_doctestskip_unless_symlinkrequires_gziprequires_bz2requires_lzma
bigmemtestbigaddrspacetestcpython_onlyget_attributerequires_IEEE_754skip_unless_xattrrequires_zlibanticipate_failureload_package_testsdetect_api_mismatchrequires_multiprocessing_queue	is_jythoncheck_impl_detailHOSTIPV6_ENABLEDfind_unused_port	bind_portopen_urlresource
temp_umaskreap_childrenTestHandlerthreading_setupthreading_cleanupreap_threadsstart_threadscheck_warningscheck_no_resource_warningEnvironmentVarGuardrun_with_locale	swap_item	swap_attrMatcherset_memlimitSuppressCrashReportsortdictrun_with_tzc               @   s   e  Z d  Z d S)r   N)__name__
__module____qualname__ rV   rV   -/opt/alt/python35/lib64/python3.5/__init__.pyr   n   s   c               @   s   e  Z d  Z d S)r   N)rS   rT   rU   rV   rV   rV   rW   r   q   s   c               @   s   e  Z d  Z d S)r	   N)rS   rT   rU   rV   rV   rV   rW   r	   t   s   Tc             c   s>   |  r5 t  j    t  j d d t  d  VWd  QRXn d  Vd  S)Nignorez.+ (module|package))warningscatch_warningsfilterwarningsDeprecationWarning)rX   rV   rV   rW   _ignore_deprecated_imports|   s    r]   Frequired_onc            C   s   t  |  n y t j |   SWnU t k
 ru } z5 t j j t |   rN   t j	 t
 |    WYd  d  } ~ Xn XWd  QRXd  S)N)r]   	importlibr
   ImportErrorsysplatform
startswithtupleunittestSkipTeststr)name
deprecatedr^   msgrV   rV   rW   r
      s    	c             C   s{   |  t  j k r# t |   t  j |  =xQ t t  j  D]@ } | |  k sX | j |  d  r3 t  j | | | <t  j | =q3 Wd  S)N.)ra   modules
__import__listrc   )rh   orig_modulesmodnamerV   rV   rW   _save_and_remove_module   s    

rq   c             C   sG   d } y t  j |  | |  <Wn t k
 r5 d } Yn Xd  t  j |  <| S)NTF)ra   rl   KeyError)rh   ro   ZsavedrV   rV   rW   _save_and_block_module   s    rs   c             C   s   |  r t  j Sd d   S)Nc             S   s   |  S)NrV   )frV   rV   rW   <lambda>   s    z$anticipate_failure.<locals>.<lambda>)re   ZexpectedFailure)Z	conditionrV   rV   rW   r6      s    c             C   sk   | d  k r d } t  j j t  j j t  j j t    } | j d |  d | d |  } | j |  | S)Nztest*Z	start_dirZtop_level_dirpattern)ospathdirname__file__ZdiscoverZaddTests)Zpkg_dirloaderZstandard_testsrv   Ztop_dirZpackage_testsrV   rV   rW   r7      s    			c             C   s   t  |   i  } g  } t |  |  z} y^ x | D] } t | |  q3 Wx* | D]" } t | |  sQ | j |  qQ Wt j |   } Wn t k
 r d  } Yn XWd  x' | j   D] \ }	 }
 |
 t j	 |	 <q Wx | D] } t j	 | =q WX| SWd  QRXd  S)N)
r]   rq   rs   appendr_   r
   r`   itemsra   rl   )rh   ZfreshZblockedri   ro   Znames_to_removeZ
fresh_nameZblocked_nameZfresh_moduleZ	orig_namemoduleZname_to_removerV   rV   rW   r      s$    c             C   sI   y t  |  |  } Wn+ t k
 r@ t j d |  | f   Yn X| Sd  S)Nzobject %r has no attribute %r)getattrAttributeErrorre   rf   )objrh   Z	attributerV   rV   rW   r2   
  s
       c             C   s
   |  a  d  S)N)_original_stdout)stdoutrV   rV   rW   r     s    c               C   s   t  p t j S)N)r   ra   r   rV   rV   rV   rW   r   #  s    c             C   s'   y t  j |  =Wn t k
 r" Yn Xd  S)N)ra   rl   rr   )rh   rV   rV   rW   r   &  s    c             G   s   y | |   SWn t  k
 r } z_ t d k r` t d | j j | f  t d | j | f  t j |  t j  | |   SWYd  d  } ~ Xn Xd  S)N   z%s: %szre-run %s%r)	OSErrorr   print	__class__rS   rw   chmodstatS_IRWXU)rx   funcargserrrV   rV   rW   
_force_run,  s    r   winc             C   s   |  |  | r | } n$ t  j j |  \ } } | p: d } d } xR | d k  r t  j |  } | rm | n	 | | k s} d  St j |  | d 9} qF Wt j d | t d d d  S)Nrk   gMbP?g      ?r   z)tests may fail, delete still pending for 
stacklevel   )	rw   rx   splitlistdirtimesleeprY   warnRuntimeWarning)r   pathnamewaitallry   rh   timeoutLrV   rV   rW   _waitfor7  s    
	r   c             C   s   t  t j |   d  S)N)r   rw   r   )filenamerV   rV   rW   _unlinkX  s    r   c             C   s   t  t j |   d  S)N)r   rw   rmdir)ry   rV   rV   rW   _rmdir[  s    r   c                s<     f d d     t    |  d d t  d d   |   d  S)Nc                s   x t  |  t j |   D] } t j j |  |  } y t j |  j } WnH t k
 r } z( t d | | f d t	 j
 d } WYd  d  } ~ Xn Xt j |  r t   | d d t  | t j |  q t  | t j |  q Wd  S)Nz-support.rmtree(): os.lstat(%r) failed with %sfiler   r   T)r   rw   r   rx   joinlstatst_moder   r   ra   
__stderr__r   S_ISDIRr   r   r   )rx   rh   fullnamemodeexc)_rmtree_innerrV   rW   r   _  s    
z_rmtree.<locals>._rmtree_innerr   Tc             S   s   t  |  t j |   S)N)r   rw   r   )prV   rV   rW   ru   n  s    z_rmtree.<locals>.<lambda>)r   )rx   rV   )r   rW   _rmtree^  s    r   c                sW   y t  j |   d  SWn t k
 r) Yn X  f d d       |   t j |   d  S)Nc                s   x t  |  t j |   D] } t j j |  |  } y t j |  j } Wn t k
 ra d } Yn Xt j	 |  r   |  t  |  t j
 |  q t  |  t j |  q Wd  S)Nr   )r   rw   r   rx   r   r   r   r   r   r   r   r   )rx   rh   r   r   )r   rV   rW   r   z  s    
z_rmtree.<locals>._rmtree_inner)shutilr   r   rw   r   )rx   rV   )r   rW   r   s  s    
c             C   s-   y t  |   Wn t t f k
 r( Yn Xd  S)N)r   FileNotFoundErrorNotADirectoryError)r   rV   rV   rW   r     s    c             C   s'   y t  |   Wn t k
 r" Yn Xd  S)N)r   r   )ry   rV   rV   rW   r     s    r   c             C   s'   y t  |   Wn t k
 r" Yn Xd  S)N)r   r   )rx   rV   rV   rW   r     s    c             C   s]   t  j j |   } t j j t j j |    } t j j | |  d  } t j | |  | S)Nc)	r_   utilcache_from_sourcerw   rx   ry   abspathr   rename)sourceZpyc_fileZup_oneZ
legacy_pycrV   rV   rW   make_legacy_pyc  s
    r   c             C   sv   t  |   xe t j D]Z } t j j | |  d  } t | d  x* d D]" } t t j j | d |  qH Wq Wd  S)Nz.pyr    r   r   optimization)r   r   r   )	r   ra   rx   rw   r   r   r_   r   r   )rp   ry   r   optrV   rV   rW   r     s    
c                 s  t  t d  r t j Sd  }  t j j d  rd d  l  d d  l  d } d } G f d d   d  j  }  j	 j
 } | j   } | s  j    |   }  j j   } | j | |  j |   j |   j |   } | s  j    t | j | @ sd }  n t j d k rd d	 l m }	 m   m }
 m } d d
 l m } |	 j | d   } | j   d k rd }  na G  f d d   d |  } |   } |
 |  } | j |  d k  s| j |  d k  rd }  |  sy; d d l m } |   } | j   | j    | j!   Wnr t" k
 r} zR t# |  } t$ |  d k rq| d  d  d } d j% t& |  j' |  }  WYd  d  } ~ Xn X|  t _( |  t _ t j S)Nresultr   r   r   c                   sC   e  Z d  Z d   j j f d   j j f d   j j f g Z d S)z*_is_gui_available.<locals>.USEROBJECTFLAGSZfInheritZ	fReserveddwFlagsN)rS   rT   rU   wintypesZBOOLDWORD_fields_rV   )ctypesrV   rW   USEROBJECTFLAGS  s   r   z,gui not available (WSF_VISIBLE flag not set)darwin)cdllc_intpointer	Structure)find_libraryZApplicationServicesz0gui tests cannot run without OS X window managerc                   s(   e  Z d  Z d   f d   f g Z d S)z._is_gui_available.<locals>.ProcessSerialNumberZhighLongOfPSNZlowLongOfPSNN)rS   rT   rU   r   rV   )r   rV   rW   ProcessSerialNumber  s   	r   z#cannot run without OS X gui process)Tk2   z [...]zTk unavailable due to {}: {}))hasattr_is_gui_availabler   ra   rb   rc   r   Zctypes.wintypesr   windllZuser32ZGetProcessWindowStationZWinErrorr   r   ZGetUserObjectInformationWZbyrefZsizeofboolr   r   r   r   Zctypes.utilr   ZLoadLibraryZCGMainDisplayIDZGetCurrentProcessZSetFrontProcesstkinterr   ZwithdrawupdateZdestroy	Exceptionrg   lenformattyperS   reason)r   Z	UOI_FLAGSZWSF_VISIBLEr   ZdllhZuofZneededresr   r   r   r   Zapp_servicesr   ZpsnZpsn_pr   rooteZ
err_stringrV   )r   r   rW   r     sh    			"			

	
r   c             C   s   t  d  k p |  t  k S)N)r   )resourcerV   rV   rW   r     s    c             C   sW   t  |   s. | d  k r" d |  } t |   |  d k rS t   rS t t j   d  S)Nz"Use of the %r resource not enabledgui)r   r	   r   r   )r   rj   rV   rV   rW   r   
  s    
c                s      f d d   } | S)Nc                s4   t  j        f d d    }  | _ | S)Nc                 s   t  j    k r t  j   j d d  d } y" t t t | j d    } Wn t k
 rd YnA X|  k  r d j t t	    } t
 j d  | | f     |  |   S)N-r   r   rk   z(%s version %s or higher required, not %s)rb   systemreleaser   rd   mapint
ValueErrorr   rg   re   rf   )r   kwversion_txtversionmin_version_txt)r   min_versionsysnamerV   rW   wrapper  s    "z:_requires_unix_version.<locals>.decorator.<locals>.wrapper)	functoolswrapsr   )r   r   )r   r   )r   rW   	decorator  s    '	z)_requires_unix_version.<locals>.decoratorrV   )r   r   r   rV   )r   r   rW   _requires_unix_version  s    r   c              G   s   t  d |   S)NZFreeBSD)r   )r   rV   rV   rW   r   .  s    c              G   s   t  d |   S)NZLinux)r   )r   rV   rV   rW   r    7  s    c                 s     f d d   } | S)Nc                s1   t  j       f d d    }  | _ | S)Nc                 s   t  j d k r t j   d } y" t t t | j d    } Wn t k
 rU Yn> X|  k  r d j t t	    } t
 j d | | f     |  |   S)Nr   r   rk   z&Mac OS X %s or higher required, not %s)ra   rb   Zmac_verrd   r   r   r   r   r   rg   re   rf   )r   r   r   r   r   )r   r   rV   rW   r   H  s    "z4requires_mac_ver.<locals>.decorator.<locals>.wrapper)r   r   r   )r   r   )r   )r   rW   r   G  s    $	z#requires_mac_ver.<locals>.decoratorrV   )r   r   rV   )r   rW   r!   @  s    z	127.0.0.1z::1c             C   s/   t  j  |  |  } t |  } | j   ~ | S)N)socketr?   close)familysocktypeZtempsockportrV   rV   rW   r>   b  s
    8
c             C   s  |  j  t j k r |  j t j k r t t d  r] |  j t j t j  d k r] t	 d   t t d  r d t
 j k r y. |  j t j t j  d k r t	 d   Wn t k
 r Yn Xt t d  r |  j t j t j d  |  j | d f  |  j   d } | S)	NSO_REUSEADDRr   zHtests should never set the SO_REUSEADDR socket option on TCP/IP sockets!SO_REUSEPORTZWITHIN_PYTHON_RPM_BUILDzHtests should never set the SO_REUSEPORT socket option on TCP/IP sockets!SO_EXCLUSIVEADDRUSEr   )r   r   AF_INETr   SOCK_STREAMr   
getsockopt
SOL_SOCKETr   r   rw   environr   r   
setsockoptr   bindgetsockname)sockhostr   rV   rV   rW   r?     s     $c              C   ss   t  j ro d  }  zL y3 t  j  t  j t  j  }  |  j t d f  d SWn t k
 rY Yn XWd  |  rn |  j   Xd S)Nr   TF)r   has_ipv6AF_INET6r   r   HOSTv6r   r   )r   rV   rV   rW   _is_ipv6_enabled  s    		r  c                s%   t  j      f d d    } | S)Nc                 sa   y   |  |   WnI t  k
 r\ } z) d t |  k rG t j d     WYd  d  } ~ Xn Xd  S)NZCERTIFICATE_VERIFY_FAILEDz.system does not contain necessary certificates)IOErrorrg   re   rf   )r   kwargsr   )rt   rV   rW   dec  s    z&system_must_validate_cert.<locals>.dec)r   r   )rt   r  rV   )rt   rW   system_must_validate_cert  s    !	r  r   i      ZdoubleZIEEEztest requires IEEE 754 doubleszrequires zlibzrequires gzipzrequires bz2zrequires lzmajavaz$testz@testz	{}_{}_tmp   æ   İ   Ł   φ   К   א   ،   ت   ก       €u   -àòɘŁğr   ZNFDntcer   u   -共Ł♡ͣztWARNING: The filename %r CAN be encoded by the filesystem encoding (%s). Unicode filename tests may not be effective   s   -surrogateescape   w         r   c             c   s   d } |  d  k r9 t  j   }  d } t j j |   }  nO y t j |   d } Wn5 t k
 r | si   t j d |  t	 d d Yn Xz	 |  VWd  | r t
 |   Xd  S)NFTz+tests may fail, unable to create temp dir: r      )tempfilemkdtemprw   rx   realpathmkdirr   rY   r   r   r   )rx   quietZdir_createdrV   rV   rW   temp_dir  s"    
	r"  c             c   sy   t  j   } y t  j |   Wn5 t k
 rT | s6   t j d |  t d d Yn Xz t  j   VWd  t  j |  Xd  S)Nz)tests may fail, unable to change CWD to: r   r  )rw   getcwdchdirr   rY   r   r   )rx   r!  Z	saved_dirrV   rV   rW   
change_cwd  s    r%  Ztempcwdc             c   sD   t  d |  d |  ( } t | d |  } | VWd  QRXWd  QRXd  S)Nrx   r!  )r"  r%  )rh   r!  Z	temp_pathZcwd_dirrV   rV   rW   r     s    umaskc             c   s-   t  j |   } z	 d  VWd  t  j |  Xd  S)N)rw   r&  )r&  ZoldmaskrV   rV   rW   rA     s    	datac             C   s   t  j j |   r |  S| d  k	 r7 t  j j | |   }  t g t j } x9 | D]1 } t  j j | |   } t  j j |  rN | SqN W|  S)N)rw   rx   isabsr   TEST_HOME_DIRra   exists)r   Zsubdirrx   ZdnfnrV   rV   rW   r     s     c             C   s4   t  j |  t  j t  j Bt  j B } t  j |  d  S)N)rw   openO_WRONLYO_CREATO_TRUNCr   )r   fdrV   rV   rW   r     s    #c             C   s<   t  |  j    } d d   | D } d j |  } d | S)Nc             S   s   g  |  ] } d  |  q S)z%r: %rrV   ).0ZpairrV   rV   rW   
<listcomp>  s   	 zsortdict.<locals>.<listcomp>z, z{%s})sortedr}   r   )dictr}   Z	reprpairsZ
withcommasrV   rV   rW   rQ     s    c              C   s9   t  t d  }  z |  j   SWd  |  j   t t  Xd  S)Nwb)r,  r   filenor   r   )r   rV   rV   rW   make_bad_fd	  s
    
r7  linenooffsetc            C   s   |  j  t   } t | d d  Wd  QRX| j } |  j | j  | d  k	 ra |  j | j |  |  j | j  | d  k	 r |  j | j |  d  S)Nz<test string>exec)assertRaisesSyntaxErrorcompile	exceptionZassertIsNotNoner8  assertEqualr9  )testcaseZ	statementr8  r9  cmr   rV   rV   rW   r"     s    	c                s  d d  l  } d d  l }  j d d    | j j |   d j d  d } t j j t	 |  }     f d d   } t j j
 |  r | |  } | d  k	 r | St |  t d  t r t d	 |  d
 t   | j j   } t r | j j d  | j |  d d } t rC| j j d  d k rCt j d |  } zO t | d  9 }	 | j   }
 x# |
 r|	 j |
  | j   }
 qgWWd  QRXWd  | j   X| |  } | d  k	 r| St d |   d  S)Nr   checkr   /r   c                sM   t  |      }  d  k r" | S |  r? | j d  | S| j   d  S)Nr   )r,  seekr   )r+  rt   )r   rB  r   rV   rW   check_valid_file)  s    z*open_urlresource.<locals>.check_valid_fileZurlfetchz	fetching %s ...r   Accept-Encodinggzipr      zContent-Encodingfileobjr5  zinvalid resource %r)rF  rG  )Zurllib.requestZurllib.parsepopparseurlparser   rw   rx   r   TEST_DATA_DIRr*  r   r   r   r   r   ZrequestZbuild_openerrG  Z
addheadersr|   r,  ZheadersgetZGzipFilereadwriter   r   )Zurlr   r   urllibr   r+  rE  rt   ZopeneroutsrV   )r   rB  r   rW   r@      s<    #	

	c               @   sF   e  Z d  Z d d   Z d d   Z e d d    Z d d   Z d	 S)
WarningsRecorderc             C   s   | |  _  d |  _ d  S)Nr   )	_warnings_last)selfZwarnings_listrV   rV   rW   __init__V  s    	zWarningsRecorder.__init__c             C   s\   t  |  j  |  j k r, t |  j d |  S| t j j k rB d  St d |  | f   d  S)Nr   z%r has no attribute %rrJ  )r   rV  rW  r   rY   WarningMessage_WARNING_DETAILSr   )rX  attrrV   rV   rW   __getattr__Z  s
    zWarningsRecorder.__getattr__c             C   s   |  j  |  j d   S)N)rV  rW  )rX  rV   rV   rW   rY   a  s    zWarningsRecorder.warningsc             C   s   t  |  j  |  _ d  S)N)r   rV  rW  )rX  rV   rV   rW   resete  s    zWarningsRecorder.resetN)rS   rT   rU   rY  r]  propertyrY   r^  rV   rV   rV   rW   rU  R  s   rU  c             c   s^  t  j d  } | j j d  } | r1 | j   t j d d  & } t  j d j d  t	 |  VWd  QRXt
 |  } g  } x |  D] \ } } d }	 xd | d  d   D]R } | j }
 t j | t |
  t j  r t |
 j |  r d }	 | j |  q W|	 r | r | j | | j f  q W| r@t d | d	   | rZt d
 | d	   d  S)Nr   Z__warningregistry__recordTrY   alwaysFzunhandled warning %sr   z)filter (%r, %s) did not catch any warning)ra   	_getframe	f_globalsrO  clearrY   rZ   rl   simplefilterrU  rn   messagerematchrg   I
issubclassr   remover|   rS   AssertionError)filtersr!  frameregistrywZreraisemissingrj   catseenwarningrV   rV   rW   _filterwarningsi  s0    
	ru  c              O   sC   | j  d  } |  s6 d t f f }  | d  k r6 d } t |  |  S)Nr!  r   T)rO  Warningru  )rm  r  r!  rV   rV   rW   rH     s    c             c   sO   t  j d d  & } t  j d d t d  Vt   Wd  QRX|  j | g   d  S)Nr`  Tra  category)rY   rZ   r[   ResourceWarning
gc_collectr?  )r@  ZwarnsrV   rV   rW   rI     s
    c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)r   c             G   si   t  j j   |  _ xP | D]H } | t  j k r t  j | } | j | k rW t  j | j =t  j | =q Wd  S)N)ra   rl   copyoriginal_modulesrS   )rX  module_namesmodule_namer~   rV   rV   rW   rY    s    zCleanImport.__init__c             C   s   |  S)NrV   )rX  rV   rV   rW   	__enter__  s    zCleanImport.__enter__c             G   s   t  j j |  j  d  S)N)ra   rl   r   r{  )rX  
ignore_excrV   rV   rW   __exit__  s    zCleanImport.__exit__N)rS   rT   rU   rY  r~  r  rV   rV   rV   rW   r     s   c               @   s   e  Z 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 d d   Z d S)rJ   c             C   s   t  j |  _ i  |  _ d  S)N)rw   r   _environ_changed)rX  rV   rV   rW   rY    s    zEnvironmentVarGuard.__init__c             C   s   |  j  | S)N)r  )rX  envvarrV   rV   rW   __getitem__  s    zEnvironmentVarGuard.__getitem__c             C   s9   | |  j  k r( |  j j |  |  j  | <| |  j | <d  S)N)r  r  rO  )rX  r  valuerV   rV   rW   __setitem__  s    zEnvironmentVarGuard.__setitem__c             C   sE   | |  j  k r( |  j j |  |  j  | <| |  j k rA |  j | =d  S)N)r  r  rO  )rX  r  rV   rV   rW   __delitem__  s    zEnvironmentVarGuard.__delitem__c             C   s   |  j  j   S)N)r  keys)rX  rV   rV   rW   r    s    zEnvironmentVarGuard.keysc             C   s   t  |  j  S)N)iterr  )rX  rV   rV   rW   __iter__  s    zEnvironmentVarGuard.__iter__c             C   s   t  |  j  S)N)r   r  )rX  rV   rV   rW   __len__  s    zEnvironmentVarGuard.__len__c             C   s   | |  | <d  S)NrV   )rX  r  r  rV   rV   rW   set  s    zEnvironmentVarGuard.setc             C   s   |  | =d  S)NrV   )rX  r  rV   rV   rW   unset  s    zEnvironmentVarGuard.unsetc             C   s   |  S)NrV   )rX  rV   rV   rW   r~    s    zEnvironmentVarGuard.__enter__c             G   se   xR |  j  j   D]A \ } } | d  k rD | |  j k rQ |  j | =q | |  j | <q W|  j t _ d  S)N)r  r}   r  rw   r   )rX  r  kvrV   rV   rW   r    s    zEnvironmentVarGuard.__exit__N)rS   rT   rU   rY  r  r  r  r  r  r  r  r  r~  r  rV   rV   rV   rW   rJ     s   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)DirsOnSysPathc             G   s6   t  j d  d   |  _ t  j |  _ t  j j |  d  S)N)ra   rx   original_valueoriginal_objectextend)rX  pathsrV   rV   rW   rY    s    zDirsOnSysPath.__init__c             C   s   |  S)NrV   )rX  rV   rV   rW   r~  #  s    zDirsOnSysPath.__enter__c             G   s&   |  j  t _ |  j t j d  d   <d  S)N)r  ra   rx   r  )rX  r  rV   rV   rW   r  &  s    zDirsOnSysPath.__exit__N)rS   rT   rU   rY  r~  r  rV   rV   rV   rW   r    s   r  c               @   s=   e  Z d  Z d d   Z d d   Z d d d d d  Z d S)r#   c             K   s   | |  _  | |  _ d  S)N)r   attrs)rX  r   r  rV   rV   rW   rY  0  s    	zTransientResource.__init__c             C   s   |  S)NrV   )rX  rV   rV   rW   r~  4  s    zTransientResource.__enter__Nc             C   st   | d  k	 rp t  |  j |  rp xO |  j j   D]2 \ } } t | |  sJ Pt | |  | k r. Pq. Wt d   d  S)Nz%an optional resource is not available)rj  r   r  r}   r   r   r	   )rX  Ztype_r  	tracebackr\  Z
attr_valuerV   rV   rW   r  7  s    zTransientResource.__exit__)rS   rT   rU   rY  r~  r  rV   rV   rV   rW   r#   +  s   errnor   g      >@errnosc      	      #   s  d d d  d! d" g } d$ d& d( d* d+ g } t  d |    |   g     sr d d   | D   d d   | D      f d d   } t j   } z!y" | d  k	 r t j |  d  VWn t j k
 r} z/ t r t j j	  j
 d d   |  WYd  d  } ~ Xn t k
 r} z xr | j
 } t |  d k r_t | d t  r_| d } q$t |  d k rt | d t  r| d } q$Pq$W| |    WYd  d  } ~ Xn XWd  t j |  Xd  S),NECONNREFUSEDo   
ECONNRESETh   EHOSTUNREACHq   ENETUNREACHe   	ETIMEDOUTn   	EAI_AGAINr  EAI_FAILr   
EAI_NONAMEr   
EAI_NODATA   
WSANO_DATA*  zResource %r is not availablec             S   s(   g  |  ] \ } } t  t | |   q SrV   )r   r  )r1  rh   numrV   rV   rW   r2  d  s   	z&transient_internet.<locals>.<listcomp>c             S   s(   g  |  ] \ } } t  t | |   q SrV   )r   r   )r1  rh   r  rV   rV   rW   r2  f  s   	c                s   t  |  d d   } t |  t j  s t |  t j  rB |  k s t |  t j j  rv d |  j k oq d k n s t |  t j j	  r d |  j
 k s d |  j
 k s d |  j
 k s |   k r t s t j j  j d d   |   d  S)	Nr  i  iW  ConnectionRefusedErrorTimeoutErrorEOFErrorr   
)r   
isinstancer   r   gaierrorrR  error	HTTPErrorcodeURLErrorr   r   ra   stderrrQ  r   )r   n)captured_errnosdenied
gai_errnosrV   rW   filter_errori  s    z(transient_internet.<locals>.filter_errorr   r  r   )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r  r  )r	   r   getdefaulttimeoutsetdefaulttimeoutnntplibZNNTPTemporaryErrorr   ra   r  rQ  r   r   r   r  )	Zresource_namer   r  Zdefault_errnosZdefault_gai_errnosr  Zold_timeoutr   arV   )r  r  r  rW   r'   L  sN    			
	
		%%
c             c   s[   d d  l  } t t |   } t t |  | j    z t t |   VWd  t t |  |  Xd  S)Nr   )ior   ra   setattrStringIO)Zstream_namer  Zorig_stdoutrV   rV   rW   captured_output  s    r  c               C   s
   t  d  S)Nr   )r  rV   rV   rV   rW   r     s    c               C   s
   t  d  S)Nr  )r  rV   rV   rV   rW   r     s    c               C   s
   t  d  S)Nstdin)r  rV   rV   rV   rW   r     s    
c               C   s5   t  j   t r t j d  t  j   t  j   d  S)Ng?)gcZcollectr:   r   r   rV   rV   rV   rW   ry    s
    


ry  c           
   c   s7   t  j   }  t  j   z	 d  VWd  |  r2 t  j   Xd  S)N)r  	isenableddisableenable)Zhave_gcrV   rV   rW   
disable_gc  s    
	r  c              C   sQ   t  j d  p d }  d } x) |  j   D] } | j d  r( | } q( W| d k S)N	PY_CFLAGSr   z-O-O0-Og)r   r  r  )	sysconfigget_config_varr   rc   )ZcflagsZ	final_optr   rV   rV   rW   python_is_optimized  s    
r  ZnPZ0ngettotalrefcountZ2PZ0Pr  c             C   s   t  j t |  t  S)N)structcalcsize_header_align)fmtrV   rV   rW   calcobjsize  s    r  c             C   s   t  j t |  t  S)N)r  r  _vheaderr  )r  rV   rV   rW   calcvobjsize  s    r     	   c             C   s   d d  l  } t j |  } t |  t k r: | j t @s_ t |  t k rl t |  j t @rl | | j 7} d t |  | | f } |  j | | |  d  S)Nr   z&wrong size for %s: got %d, expected %d)		_testcapira   	getsizeofr   	__flags___TPFLAGS_HEAPTYPE_TPFLAGS_HAVE_GCZSIZEOF_PYGC_HEADr?  )testosizer  r   rj   rV   rV   rW   check_sizeof  s    %r  c                s      f d d   } | S)Nc                s4       f d d   }   j  | _    j | _ | S)Nc                 s   y. d d  l  } t |    } | j |  } Wn& t k
 rE   YnC d  } } Yn2 Xx.  D]& } y | j | |  PWq^ Yq^ Xq^ Wz  |  |   SWd  | r | r | j | |  Xd  S)Nr   )localer   	setlocaler   )r   kwdsr  rw  Zorig_localeloc)catstrr   localesrV   rW   inner	  s$    	z1run_with_locale.<locals>.decorator.<locals>.inner)rS   __doc__)r   r  )r  r  )r   rW   r     s    z"run_with_locale.<locals>.decoratorrV   )r  r  r   rV   )r  r  rW   rK     s    c                s     f d d   } | S)Nc                s1      f d d   }   j  | _    j | _ | S)Nc                 s   y t  j } Wn! t k
 r0 t j d   Yn Xd t j k rP t j d } n d  }  t j d <|   z   |  |   SWd  | d  k r t j d =n | t j d <t  j   Xd  S)Nztzset requiredZTZ)r   tzsetr   re   rf   rw   r   )r   r  r  Zorig_tz)r   tzrV   rW   r  -  s    z-run_with_tz.<locals>.decorator.<locals>.inner)rS   r  )r   r  )r  )r   rW   r   ,  s    zrun_with_tz.<locals>.decoratorrV   )r  r   rV   )r  rW   rR   +  s    c          	   C   s   d d d t  d t d d t i } t j d |  t j t j B } | d  k r` t d |  f   t t | j	 d   | | j	 d	  j
    } | a | t k r t } | t d k  r t d
 |  f   | a d  S)Nr  i   mgtz(\d+(\.\d+)?) (K|M|G|T)b?$zInvalid memory limit %rr   r  z$Memory limit %r too low to be useful)_1M_1Grg  rh  
IGNORECASEVERBOSEr   r   floatgrouplowerreal_max_memuseMAX_Py_ssize_t_2Gr   )limitZsizesr  memlimitrV   rV   rW   rO   U  s    2c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)_MemoryWatchdogc             C   s(   d j  d t j    |  _ d |  _ d  S)Nz/proc/{pid}/statmpidF)r   rw   getpidprocfilestarted)rX  rV   rV   rW   rY  o  s    z_MemoryWatchdog.__init__c             C   s   y t  |  j d  } WnO t k
 rg } z/ t j d j |  t  t j j	   d  SWYd  d  } ~ Xn Xt
 d  } t j t j | g d | d t j |  _ | j   d |  _ d  S)Nrz!/proc not available for stats: {}zmemory_watchdog.pyr  r  T)r,  r  r   rY   r   r   r   ra   r  flushr   
subprocessPopen
executableDEVNULLmem_watchdogr   r  )rX  rt   r   Zwatchdog_scriptrV   rV   rW   starts  s    
z_MemoryWatchdog.startc             C   s'   |  j  r# |  j j   |  j j   d  S)N)r  r  	terminatewait)rX  rV   rV   rW   stop  s    	z_MemoryWatchdog.stopN)rS   rT   rU   rY  r  r  rV   rV   rV   rW   r   j  s   r   c                s       f d d   } | S)Nc                s.       f d d      _    _  S)Nc          
      s    j  }  j } t s! d } n | } t s4   r_ t | | k  r_ t j d | | d   t r t r t   t d j d | | d   t   } | j	   n d  } z  |  |  SWd  | r | j
   Xd  S)	Ni  z'not enough memory: %.1fG minimum neededi   r  z* ... expected peak memory use: {peak:.1f}GZpeaki   @i   @)r  memuser  re   rf   r   r   r   r   r  r  )rX  r  r  maxsizeZwatchdog)dry_runrt   r   rV   rW   r     s*    				z.bigmemtest.<locals>.decorator.<locals>.wrapper)r  r  )rt   )r  r  r  )rt   r   rW   r     s    		zbigmemtest.<locals>.decoratorrV   )r  r  r  r   rV   )r  r  r  rW   r/     s    !c                s     f d d   } | S)Nc                s^   t  t k  rP t d
 k r6 t  d k r6 t j d   qZ t j d t d   n
   |   Sd  S)Nr   ?   r      z-not enough memory: try a 32-bit build insteadz'not enough memory: %.1fG minimum neededi   r  l            l    l        i   @)r   r  re   rf   )rX  )rt   rV   rW   r     s    z!bigaddrspacetest.<locals>.wrapperrV   )rt   r   rV   )rt   rW   r0     s    c               @   s   e  Z d  Z d d   Z d S)r(   c             C   s   t  j   } | |  | S)N)re   Z
TestResult)rX  r  r   rV   rV   rW   run  s    
zBasicTestRunner.runN)rS   rT   rU   r  rV   rV   rV   rW   r(     s   c             C   s   |  S)NrV   )r   rV   rV   rW   _id  s    r  c             C   sP   |  d k r& t    r& t j t  j  St |   r6 t St j d j |    Sd  S)Nr   zresource {0!r} is not enabled)r   re   skipr   r   r  r   )r   rV   rV   rW   requires_resource  s
    r  c             C   s   t  d d  |   S)NcpythonT)impl_detail)r  rV   rV   rW   r1     s    c             K   sz   t  |   r t S|  d  k rm t |  \ } } | r= d }  n d }  t | j    } |  j d j |   }  t j |   S)Nz*implementation detail not available on {0}z%implementation detail specific to {0}z or )	r;   r  _parse_guardsr3  r  r   r   re   r  )rj   guardsZ
guardnamesdefaultrV   rV   rW   r    s    	r  c             C   sj   t  d  k rG d d  l } y | j   d a  Wn t k
 rF d a  Yn Xd } t  rW |  St j |  |   S)Nr   TFz6requires a functioning shared semaphore implementation)_have_mp_queuemultiprocessingQueuer`   re   r  )r  r  rj   rV   rV   rW   r9     s    

c             C   s7   |  s d d i d f St  |  j    d } |  | f S)Nr  TFr   )rn   values)r  Zis_truerV   rV   rW   r    s    r  c              K   s.   t  |   \ }  } |  j t j   j   |  S)N)r  rO  rb   Zpython_implementationr  )r  r  rV   rV   rW   r;     s    c                s<   t  t d  s   St j      f d d    } | Sd  S)Ngettracec                 s?   t  j   } z t  j d     |  |   SWd  t  j |  Xd  S)N)ra   r"  settrace)r   r  Zoriginal_trace)r   rV   rW   r     s
    zno_tracing.<locals>.wrapper)r   ra   r   r   )r   r   rV   )r   rW   
no_tracing  s    !r$  c             C   s   t  t |    S)N)r$  r1   )r  rV   rV   rW   refcount_test#  s    r%  c             C   so   g  } xY |  j  D]N } t | t j  rE t | |  | j |  q | |  r | j |  q W| |  _  d  S)N)Z_testsr  re   	TestSuite_filter_suiter|   )suiteZpredZnewtestsr  rV   rV   rW   r'  .  s    r'  c             C   s   t  r' t j t j d d d t } n	 t   } | j |   } | j   s t	 | j
  d k r~ | j r~ | j
 d d } nI t	 | j  d k r | j
 r | j d d } n d } t  s | d 7} t |   d  S)N	verbosityr   r   r   r   zmultiple errors occurredz!; run in verbose mode for details)r   re   ZTextTestRunnerra   r   r   r(   r  ZwasSuccessfulr   errorsZfailuresr   )r(  Zrunnerr   r   rV   rV   rW   
_run_suite:  s    	 
r+  c             C   sw   t  d  k r d S|  j   } xT t  D]L } t j | |  r? d Sx- | j d  D] } t j | |  rO d SqO Wq# Wd S)NTrk   F)match_testsidfnmatchfnmatchcaser   )r  Ztest_idZ
match_testrh   rV   rV   rW   _match_testN  s    r0  c              G   s   t  j t  j f } t  j   } x |  D] } t | t  rx | t j k ri | j t  j t j |   q t	 d   q% t | |  r | j |  q% | j t  j
 |   q% Wt | t  t |  d  S)Nz)str arguments must be keys in sys.modules)re   r&  ZTestCaser  rg   ra   rl   ZaddTestZfindTestCasesr   Z	makeSuiter'  r0  r+  )classesZvalid_typesr(  clsrV   rV   rW   r)   _  s     c               C   s   d  S)NrV   rV   rV   rV   rW   _check_docstringsv  s    r3  win32WITH_DOC_STRINGSztest requires docstringsc             C   s   d d  l  } | d  k r! t } n d  } | j |  d | d | \ } } | rd t d | | f   t r t d |  j | f  | | f S)Nr   r   optionflagsz%d of %d doctests failedz,doctest (%s) ... %d tests with zero failures)doctestr   testmodr   r   rS   )r~   r)  r6  r7  rt   r  rV   rV   rW   r*     s    	!c               C   s   t  j j   f S)N)ra   rl   rz  rV   rV   rV   rW   modules_setup  s    r9  c             C   sM   d d   t  j j   D } t  j j   t  j j |  t  j j |   d  S)Nc             S   s1   g  |  ]' \ } } | j  d   r | | f  q S)z
encodings.)rc   )r1  r  r  rV   rV   rW   r2    s   	 	z#modules_cleanup.<locals>.<listcomp>)ra   rl   r}   rd  r   )Z
oldmodules	encodingsrV   rV   rW   modules_cleanup  s    r;  c               C   s-   t  r t  j   t j j   f Sd f  f Sd  S)Nr   )_thread_count	threading	_danglingrz  rV   rV   rV   rW   rD     s    c              G   sa   t  s
 d  Sd } xJ t |  D]< } t  j   t j f } | |  k rE Pt j d  t   q Wd  S)Nd   g{Gz?)r<  ranger=  r>  r?  r   r   ry  )Zoriginal_valuesZ
_MAX_COUNTcountr!  rV   rV   rW   rE     s    c                s/   t  s
   St j      f d d    } | S)Nc                 s)   t    } z   |    SWd  t |   Xd  S)N)rD   rE   )r   key)r   rV   rW   r     s    	zreap_threads.<locals>.decorator)r<  r   r   )r   r   rV   )r   rW   rF     s    !c           	   C   sX   t  t d  rT d }  x< y, t j |  t j  \ } } | d k rC PWq PYq Xq Wd  S)Nwaitpidr   r   rJ  )r   rw   rD  WNOHANG)Zany_processr  statusrV   rV   rW   rB     s    	c             c   sv  t  |   }  g  } zi y, x% |  D] } | j   | j |  q WWn1 t rm t d t |   t |  f    Yn Xd  VWd  z | r |   t j   } } x t d d  D]{ } | d 7} x. | D]& } | j t	 | t j   d   q Wd d   | D } | s	Pt r t d t |  | f  q WWd  d	 d   | D } | rpt
 j t j  t d
 t |    XXd  S)Nz/Can't start %d threads, only %d threads startedr   r  <   g{Gz?c             S   s"   g  |  ] } | j    r |  q SrV   )isAlive)r1  r  rV   rV   rW   r2    s   	 z!start_threads.<locals>.<listcomp>z7Unable to join %d threads during a period of %d minutesc             S   s"   g  |  ] } | j    r |  q SrV   )rH  )r1  r  rV   rV   rW   r2    s   	 zUnable to join %d threads)rn   r  r|   r   r   r   r   rA  r   maxfaulthandlerZdump_tracebackra   r   rl  )threadsZunlockr  r  endtimeZ	starttimer   rV   rV   rW   rG     s>    
	
$c             c   s   t  |  |  rN t |  |  } t |  | |  z	 | VWd  t |  | |  Xn9 t |  | |  z	 d  VWd  t  |  |  r t |  |  Xd  S)N)r   r   r  delattr)r   r\  new_valreal_valrV   rV   rW   rM     s    		c             c   sh   | |  k r: |  | } | |  | <z	 | VWd  | |  | <Xn* | |  | <z	 d  VWd  | |  k rc |  | =Xd  S)NrV   )r   itemrN  rO  rV   rV   rW   rL   :  s    

	
	c             C   s   t  j d d |   j   }  |  S)Ns   \[\d+ refs, \d+ blocks\]\r?\n?    )rg  substrip)r  rV   rV   rW   strip_python_stderrY  s    rT  Z	getcountsz-types are immortal if COUNT_ALLOCS is definedc               C   s
   t  j   S)N)r  _args_from_interpreter_flagsrV   rV   rV   rW   args_from_interpreter_flagsf  s    rV  c               @   s@   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 S)
rC   c             C   s#   t  j j j |  d  | |  _ d  S)Nr   )logginghandlersBufferingHandlerrY  matcher)rX  rZ  rV   rV   rW   rY  p  s    zTestHandler.__init__c             C   s   d S)NFrV   )rX  rV   rV   rW   shouldFlushy  s    zTestHandler.shouldFlushc             C   s$   |  j  |  |  j j | j  d  S)N)r   bufferr|   __dict__)rX  r`  rV   rV   rW   emit|  s    zTestHandler.emitc             K   s:   d } x- |  j  D]" } |  j j | |  r d } Pq W| S)NFT)r\  rZ  matches)rX  r  r   drV   rV   rW   r_    s    zTestHandler.matchesN)rS   rT   rU   rY  r[  r^  r_  rV   rV   rV   rW   rC   o  s   	c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)	rN   rj   rf  c             K   sP   d } xC | D]; } | | } | j  |  } |  j | | |  s d } Pq W| S)NTF)rO  match_value)rX  r`  r  r   r  r  dvrV   rV   rW   r_    s    
zMatcher.matchesc             C   sj   t  |  t  |  k r! d } nE t  |  t k	 sB | |  j k rQ | | k } n | j |  d k } | S)NFr   )r   rg   _partial_matchesfind)rX  r  rb  r  r   rV   rV   rW   ra    s    	!zMatcher.match_valueN)rj   rf  )rS   rT   rU   rc  r_  ra  rV   rV   rV   rW   rN     s   c              C   so   t  d  k	 r t  St d }  y t j t |   d } Wn! t t t f k
 rW d } Yn Xt j |   | a  | S)Nr   TF)_can_symlinkr   rw   symlinkr   NotImplementedErrorr   rk  )Zsymlink_pathcanrV   rV   rW   r     s    

c             C   s,   t    } d } | r |  St j |  |   S)Nz*Requires functional symlink implementation)r   re   r  )r  okrj   rV   rV   rW   r+     s    	c              C   s	  t  d  k	 r t  St t d  s( d }  n t j   \ } } z t t d   } yu t j | d d  t j | j   d d  t	 j
   } t j d |  } | d  k p t | j d   d k }  Wn t k
 r d }  Yn XWd  QRXWd  t t  t |  X|  a  |  S)	NsetxattrFr5  s	   user.testrQ  z2.6.(\d{1,2})r   '   )
_can_xattrr   rw   r  mkstempr,  r   rj  r6  rb   r   rg  rh  r   r  r   r   )rh  Ztmp_fpZtmp_namefpZkernel_versionr  rV   rV   rW   	can_xattr  s&    	+
ro  c             C   s,   t    } d } | r |  St j |  |   S)Nz(no non-broken extended attribute support)ro  re   r  )r  ri  rj   rV   rV   rW   r4     s    	c             C   s}   t  j d |   d } | j } | j   } | | k rB | j   } y t j j | |  SWn t k
 rq d SYn XWd  QRXd  S)NdirF)	r  NamedTemporaryFilerh   upperr  rw   rx   samefiler   )Z	directorybase	base_pathZ	case_pathrV   rV   rW   r     s    	rX   c            C   sU   t  t |    t  t |   } | r8 | t  |  8} t  d d   | D  } | S)Nc             s   s4   |  ]* } | j  d   s( | j d  r | Vq d S)___N)rc   endswith)r1  r  rV   rV   rW   	<genexpr>  s    z&detect_api_mismatch.<locals>.<genexpr>)r  rp  )Zref_apiZ	other_apirX   Zmissing_itemsrV   rV   rW   r8     s
    "c               @   s4   e  Z d  Z d Z d Z d d   Z d d   Z d S)rP   Nc       
      C   s  t  j j d  r d d  l } | j j |  _ d } |  j j |  |  _ |  j j |  j | B y d d  l	 } | j
 Wn t t f k
 r YqXi  |  _ xH| j | j | j g D]C } | j
 | | j  } | j | | j  } | | f |  j | <q Wn t d  k	 r]y9 t j t j  |  _ t j t j d |  j d f  Wn t t f k
 r\Yn Xt  j d k rd d d d	 g } t j | d
 t j d t j } |  | j   d }	 Wd  QRX|	 j   d k rt d d d d d |  S)Nr   r   r   r   r   z/usr/bin/defaultsrP  zcom.apple.CrashReporterZ
DialogTyper   r  s	   developerz:this test triggers the Crash Reporter, that is intentionalendr   r  T) ra   rb   rc   r   r   Zkernel32_k32SetErrorMode	old_valuemsvcrtCrtSetReportModer   r`   	old_modesZCRT_WARNZ	CRT_ERRORZ
CRT_ASSERTZCRTDBG_MODE_FILECrtSetReportFileZCRTDBG_FILE_STDERRr   Z	getrlimitRLIMIT_CORE	setrlimitr   r   r  r  PIPEcommunicaterS  r   )
rX  r   ZSEM_NOGPFAULTERRORBOXr~  report_typeold_modeold_filecmdprocr   rV   rV   rW   r~  	  sN    						zSuppressCrashReport.__enter__c             G   s   |  j  d  k r d  St j j d  r |  j j |  j   |  j r d d  l } x |  j j   D]2 \ } \ } } | j	 | |  | j
 | |  q] WnA t d  k	 r y t j t j |  j   Wn t t f k
 r Yn Xd  S)Nr   r   )r}  ra   rb   rc   r{  r|  r  r~  r}   r  r  r   r  r  r   r   )rX  r  r~  r  r  r  rV   rV   rW   r  L	  s    	"zSuppressCrashReport.__exit__)rS   rT   rU   r}  r  r~  r  rV   rV   rV   rW   rP   	  s   Ac                s   t     d   y  j   Wn* t t f k
 rP t    d    Yn Xd        f d d   } |  j |  t   |  d  S)NFTc                  s*     r t      n t    d  S)N)r  rM  rV   )attr_is_local	attr_nameobject_to_patchr}  rV   rW   cleanupw	  s    zpatch.<locals>.cleanup)r   r]  r   rr   Z
addCleanupr  )Ztest_instancer  r  Z	new_valuer  rV   )r  r  r  r}  rW   patcha	  s    
r  c             C   sY   y d d  l  } Wn t k
 r$ Yn X| j   r@ t j d   d d  l } | j |   S)Nr   zUrun_in_subinterp() cannot be used if tracemalloc module is tracing memory allocations)tracemallocr`   Z
is_tracingre   rf   r  run_in_subinterp)r  r  r  rV   rV   rW   r  	  s    r  c                sb   G   f d d   d |  } d   | | |     |  j  t t   t   |  j    d  S)Nc                   s%   e  Z d  Z    f d d   Z d S)z%check_free_after_iterating.<locals>.Ac                s-   d   y t    Wn t k
 r( Yn Xd  S)NT)nextStopIteration)rX  )doneitrV   rW   __del__	  s
    z-check_free_after_iterating.<locals>.A.__del__N)rS   rT   rU   r  rV   )r  r  rV   rW   A	  s   r  F)r;  r  r  ry  Z
assertTrue)r  r  r2  r   r  rV   )r  r  rW   check_free_after_iterating	  s    	r  i   i  @ i @ i @  i   i  )r	  r
  r  r  r  r  r  r  r  r  r  )r  r  )r  r  r  r  r  i @  i   i   )rS   r`   collections.abccollections
contextlibr  rJ  r.  r   r  r_   importlib.utilZlogging.handlersrW  r  rw   rb   rg  r   r   r   r  r  ra   r  r  r   re   Zurllib.errorrR  rY   r<  r>  Zmultiprocessing.processr  zlibrG  bz2lzmar   __all__r   r   r   rf   r	   contextmanagerr]   r
   rq   rs   r6   r7   r   r2   r   r   r   r  r   r,  r   r   r   r   r   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r<   r  r   r   r>   r?   r  r=   r  r   ZSOCK_MAX_SIZEZ
skipUnlessr  __getformat__r3   r5   r,   r-   r.   r:   rh   r   r   r  ZFS_NONASCII	characterfsdecodefsencodeUnicodeErrorZTESTFN_UNICODEZunicodedata	normalizegetfilesystemencodingZTESTFN_ENCODINGZTESTFN_UNENCODABLEZgetwindowsversionencodeUnicodeEncodeErrorr   decodeUnicodeDecodeErrorZTESTFN_UNDECODABLEZTESTFN_NONASCIIr#  r   r"  r%  r   r   rA   rx   ry   r   rz   ZTEST_SUPPORT_DIRr)  r   rN  r   r   rQ   r7  r"   r@   objectrU  ru  rH   rI   r   abcMutableMappingrJ   r  r#   r   r  r$   r  r%   r&   r'   r  r   r   r   ry  r  r  r  r  r  r  r  r  r  r  rK   rR   r  r  r  Z_4Gr  r  rO   r   r/   r0   r(   r  r  r1   r  r  r9   r  r;   r$  r%  r'  r+  r0  r)   r3  r  ZMISSING_C_DOCSTRINGSr  ZHAVE_DOCSTRINGSZrequires_docstringsr*   r9  r;  rD   rE   rF   rB   rG   rM   rL   rT  ZskipIfZrequires_type_collectingrV  rX  rY  rC   rN   re  r   r+   rl  ro  r4   r   r8   rP   r  r  r  rV   rV   rV   rW   <module>   st  										
2	
!		J			>&			          


	    

!2' 5	J		


$#


	0
			#
		"_"