B
    18™\ @ ã               @   s  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	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Zd dlZyd dlmZ W n ek
rÌ   dZY nX d dlmZmZmZmZ d dlmZmZ d dlmZm Z  d dl!m"Z# d dl!m$Z% d d	l!m&Z& d d
l'm(Z( e#j)Z*e* +d¡rTe*dd… Z*e
e*ƒZ*dd„ Z,e# -¡ Z.dd„ Z/dd„ Z0d 1¡ Z2G dd„ dej3ƒZ4dd„ Z5dd„ Z6dd„ Z7ej8dd„ ƒZ9G dd„ dƒZ:G d d!„ d!e4ƒZ;G d"d#„ d#e4ƒZ<G d$d%„ d%ej3ƒZ=G d&d'„ d'e=ƒZ>G d(d)„ d)e=ƒZ?G d*d+„ d+e=ƒZ@G d,d-„ d-e=ƒZAG d.d/„ d/e=ƒZBG d0d1„ d1e=ƒZCG d2d3„ d3eDƒZEG d4d5„ d5eDƒZFd6d7„ ZGG d8d9„ d9ej3ƒZHeDƒ ZIG d:d;„ d;ej3ƒZJG d<d=„ d=ej3ƒZKG d>d?„ d?eKƒZLG d@dA„ dAeLƒZMG dBdC„ dCej3ƒZNG dDdE„ dEej3ƒZOG dFdG„ dGej3ƒZPG dHdI„ dIejQƒZRG dJdK„ dKejSƒZTG dLdM„ dMej3ƒZUG dNdO„ dOej3ƒZVG dPdQ„ dQej3ƒZWG dRdS„ dSej3ƒZXG dTdU„ dUej3ƒZYG dVdW„ dWej3ƒZZG dXdY„ dYƒZ[G dZd[„ d[ej3ƒZ\G d\d]„ d]ej3ƒZ]G d^d_„ d_ej3ƒZ^d`da„ Z_e`dbkre_ƒ  dS )cé    N)Únormcase)ÚThreadPoolExecutor)Úrun_unittestÚTESTFNÚDirsOnSysPathÚcpython_only)ÚMISSING_C_DOCSTRINGSr   )Úassert_python_okÚassert_python_failure)Úinspect_fodder)Úinspect_fodder2)Úsupport)Ú_ready_to_import)ÚcÚoéÿÿÿÿc             G   s   t | ƒf| S )N)r   )ÚfilenameÚargs© r   úU/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_inspect.pyÚrevise7   s    r   c              c   s˜   ddddddddg} x~t d	d
t| ƒ ƒD ]h}g }d	}x.t t| ƒƒD ]}|||> @ rB| | | ¡ qBW dd |¡ d }i }t|||ƒ |d V  q(W dS )z—
    Yields a whole bunch of functions with only keyword-only parameters,
    where those parameters are always in lexicographically sorted order.
    ÚaÚbarr   ÚdeltaZephraimZmagicalZyoyoÚzé   é   zdef foo(*, z, z): passÚfooN)ÚrangeÚlenÚappendÚjoinÚexec)Ú
parametersÚiÚpÚbitÚjZfn_textZsymbolsr   r   r   Ú5signatures_with_lexicographic_keyword_only_parameters=   s    r(   c             C   s   d S )Nr   )ÚthrowÚoutZtheZbabyZwith_Zthe_Z	bathwaterr   r   r   Ú#unsorted_keyword_only_parameters_fnO   s    r+   z'throw out the baby with_ the_ bathwaterc               @   sT   e Zd Zeejejejejej	ej
ejejejejejejejejgƒZdd„ ZdS )Ú
IsTestBasec             C   s„   t |ƒ}|  ||ƒd|j|f ¡ x\| jt|gƒ D ]H}|tjksV|tjksV|tjkrb|tj	krbq4|  
||ƒd|j|f ¡ q4W d S )Nz%s(%s)z
not %s(%s))ÚevalÚ
assertTrueÚ__name__Ú
predicatesÚsetÚinspectÚisgeneratorfunctionÚisasyncgenfunctionÚiscoroutinefunctionÚ
isfunctionÚassertFalse)ÚselfÚ	predicateÚexpÚobjÚotherr   r   r   Úistest]   s    



zIsTestBase.istestN)r/   Ú
__module__Ú__qualname__r1   r2   Ú	isbuiltinÚisclassÚiscodeÚisframer6   ÚismethodÚismoduleÚistracebackÚisgeneratorr3   Úiscoroutiner5   Ú
isasyncgenr4   r0   r=   r   r   r   r   r,   U   s   r,   c             c   s   xt dƒD ]
}|V  q
W d S )Nr   )r   )r8   r$   r   r   r   Úgenerator_function_examplei   s    rJ   c          	   C  s:   x4t dƒ2 y3 d H }W n
 tk
s*X |V  q
   Y  W d S )Nr   )r   ÚStopAsyncIteration)r8   r$   r   r   r   Ú async_generator_function_examplem   s    "rL   c             Ã   s   dS )NÚspamr   )r8   r   r   r   Úcoroutine_function_exampleq   s    rN   c             c   s
   d V  dS )NrM   r   )r8   r   r   r   Úgen_coroutine_function_examplet   s    rO   c               @   s   e Zd Zdd„ ZdS )ÚEqualsToAllc             C   s   dS )NTr   )r8   r<   r   r   r   Ú__eq__z   s    zEqualsToAll.__eq__N)r/   r>   r?   rQ   r   r   r   r   rP   y   s   rP   c               @   sL   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S )ÚTestPredicatesc          	   C   s–  |   tjd¡ |   tjd¡ |   tjd¡ zxydd  W nf   t ¡ d a|   tjd¡ |   tjd¡ t	t
d	ƒr‚|   tjd
¡ n|  t ttjƒj¡¡ Y nX W d d aX |   tjd¡ |   tjd¡ |   tjd¡ |   tjd¡ |   tjd¡ |   tjd¡ |   tjd¡ |   tjd¡ |   tjd¡ t ¡ , t d¡ |   tjd¡ |   tjd¡ W d Q R X t	t
dƒr~|   tjd¡ n|  t tjj ¡¡ d S )Nzsys.exitz	[].appendzmod.spam.__code__r   r   r   ztb.tb_frameÚtbÚGetSetDescriptorTypeztype(tb.tb_frame).f_localszmod.spamzmod.StupidGit.abusez	git.argueÚmodz'collections.defaultdict.default_factoryz(x for x in range(2))rJ   z#async_generator_function_example(1)rL   Úignorezcoroutine_function_example(1)rN   ÚMemberDescriptorTypezdatetime.timedelta.days)!r=   r2   r@   rB   ÚsysÚexc_inforS   rC   rF   ÚhasattrÚtypesÚisgetsetdescriptorr7   ÚtypeÚtb_frameÚf_localsr6   rD   rE   ÚisdatadescriptorrG   r3   rI   r4   ÚwarningsÚcatch_warningsÚsimplefilterrH   r5   ÚismemberdescriptorÚdatetimeÚ	timedeltaÚdays)r8   r   r   r   Útest_excluding_predicates   s@    
"

z(TestPredicates.test_excluding_predicatesc             C   s¤   t dƒ}tdƒ}|  t t ¡¡ |  t |¡¡ |  t t ¡¡ |  t |¡¡ |  t t¡¡ |  t |¡¡ |  t t¡¡ |  t |¡¡ | 	¡  | 	¡  d S )Nr   )
rO   rN   r7   r2   r5   rH   r.   r3   rG   Úclose)r8   Úgen_coroÚcoror   r   r   Útest_iscoroutine¨   s      zTestPredicates.test_iscoroutinec             C   s¼   dd„ }|   t |ƒ ¡¡ tdƒ}tdƒ}|  t |¡¡ |  t |¡¡ G dd„ dƒ}|  t |ƒ ¡¡ |   t |¡¡ G dd„ dƒ}|ƒ }dd	„ |_|   t |¡¡ | ¡  | ¡  d S )
Nc               s   s
   d V  d S )Nr   r   r   r   r   Úgen¿   ó    z,TestPredicates.test_isawaitable.<locals>.genr   c               @   s   e Zd Zdd„ ZdS )z/TestPredicates.test_isawaitable.<locals>.Futurec               S   s   d S )Nr   r   r   r   r   Ú	__await__É   s    z9TestPredicates.test_isawaitable.<locals>.Future.__await__N)r/   r>   r?   ro   r   r   r   r   ÚFutureÈ   s   rp   c               @   s   e Zd ZdS )z2TestPredicates.test_isawaitable.<locals>.NotFutureN)r/   r>   r?   r   r   r   r   Ú	NotFutureÎ   s    rq   c               S   s   d S )Nr   r   r   r   r   Ú<lambda>Ð   rn   z1TestPredicates.test_isawaitable.<locals>.<lambda>)r7   r2   ÚisawaitablerN   rO   r.   ro   ri   )r8   rm   rk   rj   rp   rq   Znot_futr   r   r   Útest_isawaitable¾   s    
 zTestPredicates.test_isawaitablec             C   s(   |   t tj¡¡ |   t g j¡¡ d S )N)r.   r2   Ú	isroutinerU   rM   Úcount)r8   r   r   r   Útest_isroutineÕ   s    zTestPredicates.test_isroutinec             C   sD   |   tjd¡ |  t t¡¡ G dd„ dtƒ}|  t |ƒ ¡¡ d S )Nzmod.StupidGitc               @   s   e Zd Zdd„ ZdS )z2TestPredicates.test_isclass.<locals>.CustomGetattrc             S   s   d S )Nr   )r8   Úattrr   r   r   Ú__getattr__Þ   s    z>TestPredicates.test_isclass.<locals>.CustomGetattr.__getattr__N)r/   r>   r?   ry   r   r   r   r   ÚCustomGetattrÝ   s   rz   )r=   r2   rA   r.   ÚlistÚobjectr7   )r8   rz   r   r   r   Útest_isclassÙ   s    zTestPredicates.test_isclassc             C   sF   G dd„ dt ƒ}|ƒ }d|_tt |¡ƒ}|  d|¡ |  d|¡ d S )Nc               @   s   e Zd ZdZdS )z/TestPredicates.test_get_slot_members.<locals>.C)r   ÚbN)r/   r>   r?   Ú	__slots__r   r   r   r   ÚCã   s   r€   é*   r   r~   )r|   r   Údictr2   Ú
getmembersÚassertInÚassertNotIn)r8   r€   ÚxÚmembersr   r   r   Útest_get_slot_membersâ   s    z$TestPredicates.test_get_slot_membersc                s   ddl m}m‰  G ‡ fdd„d|d}G dd„ d|ƒ}|ƒ }|  t |¡¡ |  t |¡¡ |  t |¡¡ |  t t¡¡ |  t d¡¡ d S )	Nr   )ÚABCMetaÚabstractmethodc                   s   e Zd Z” dd„ ƒZdS )z<TestPredicates.test_isabstract.<locals>.AbstractClassExamplec             S   s   d S )Nr   )r8   r   r   r   r   ð   s    z@TestPredicates.test_isabstract.<locals>.AbstractClassExample.fooN)r/   r>   r?   r   r   )rŠ   r   r   ÚAbstractClassExampleî   s   r‹   )Ú	metaclassc               @   s   e Zd Zdd„ ZdS )z4TestPredicates.test_isabstract.<locals>.ClassExamplec             S   s   d S )Nr   )r8   r   r   r   r   õ   s    z8TestPredicates.test_isabstract.<locals>.ClassExample.fooN)r/   r>   r?   r   r   r   r   r   ÚClassExampleô   s   r   é   )Úabcr‰   rŠ   r.   r2   Ú
isabstractr7   Úint)r8   r‰   r‹   r   r   r   )rŠ   r   Útest_isabstractë   s    zTestPredicates.test_isabstractc                s¬   ddl m}m‰  g ‰G ‡fdd„d|d}G ‡ fdd„d|ƒ}G dd	„ d	|ƒ}|  ˆd
dg¡ ˆ ¡  G dd„ d|ƒ}G dd„ d|ƒ}G dd„ d|ƒ}|  ˆd
d
dg¡ d S )Nr   )r‰   rŠ   c                   s   e Zd Z‡ fdd„ZdS )zLTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractCheckerc                s   ˆ   t | ¡¡ d S )N)r    r2   r   )Úcls)Úisabstract_checksr   r   Ú__init_subclass__  s    z^TestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractChecker.__init_subclass__N)r/   r>   r?   r•   r   )r”   r   r   ÚAbstractChecker  s   r–   )rŒ   c                   s   e Zd Z” dd„ ƒZdS )zQTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractClassExamplec             S   s   d S )Nr   )r8   r   r   r   r     s    zUTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractClassExample.fooN)r/   r>   r?   r   r   )rŠ   r   r   r‹     s   r‹   c               @   s   e Zd Zdd„ ZdS )zITestPredicates.test_isabstract_during_init_subclass.<locals>.ClassExamplec             S   s   d S )Nr   )r8   r   r   r   r     s    zMTestPredicates.test_isabstract_during_init_subclass.<locals>.ClassExample.fooN)r/   r>   r?   r   r   r   r   r   r     s   r   TFc               @   s   e Zd ZdS )zJTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractChildN)r/   r>   r?   r   r   r   r   ÚAbstractChild  s   r—   c               @   s   e Zd ZdS )zOTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractGrandchildN)r/   r>   r?   r   r   r   r   ÚAbstractGrandchild  s   r˜   c               @   s   e Zd ZdS )zOTestPredicates.test_isabstract_during_init_subclass.<locals>.ConcreteGrandchildN)r/   r>   r?   r   r   r   r   ÚConcreteGrandchild  s   r™   )r   r‰   rŠ   ÚassertEqualÚclear)r8   r‰   r–   r‹   r   r—   r˜   r™   r   )rŠ   r”   r   Ú$test_isabstract_during_init_subclass  s    z3TestPredicates.test_isabstract_during_init_subclassN)r/   r>   r?   rh   rl   rt   rw   r}   rˆ   r’   rœ   r   r   r   r   rR   }   s   )		rR   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S )ÚTestInterpreterStackc             O   s&   t jj| f|ž|Ž t ddd¡ d S )Né   é   é	   )ÚunittestÚTestCaseÚ__init__ÚgitÚabuse)r8   r   Úkwargsr   r   r   r£     s    zTestInterpreterStack.__init__c             C   s    |   tjd¡ |   tjd¡ d S )Nz	git.ex[2]zmod.fr)r=   r2   rF   rC   )r8   r   r   r   Útest_abuse_done   s    z$TestInterpreterStack.test_abuse_donec             C   s&  |   ttjƒdk¡ |  ttjd dd … Ž tdddgdf¡ |  ttjd dd … Ž tddd	gdf¡ |  ttjd
 dd … Ž tdddgdf¡ |  ttjd dd … Ž tdddgdf¡ tjd }|  |jtj	¡ |  |j
d¡ |  |jtj¡ |  |jd¡ |  d|jd ¡ |  |jd¡ d S )NrŽ   r   r   é   Úeggsz    st = inspect.stack()
r    rM   z    eggs(b + d, c + f)
r   é+   Úarguez            spam(a, b, c)
é   é'   r¥   z        self.argue(a, b, c)
zinspect.stack())r.   r   rU   Ústrš   r   ÚmodfileÚassertIsÚframeÚfrÚlinenor   Ú__file__Úfunctionr„   Úcode_contextÚindex)r8   Úrecordr   r   r   Ú
test_stack$  s     
zTestInterpreterStack.test_stackc             C   s”   |   ttjƒd¡ |   ttjd dd … Ž tdddgdf¡ |   ttjd dd … Ž tddd	gdf¡ |   ttjd
 dd … Ž tdddgdf¡ d S )Nr¬   r   r   rª   r«   z            spam(a, b, c)
r    rM   z    eggs(b + d, c + f)
r   é   r©   z    q = y / 0
)rš   r   r¤   Útrr   r¯   )r8   r   r   r   Ú
test_trace7  s    zTestInterpreterStack.test_tracec             C   sl   t  tj¡\}}}}|  |ddg¡ |  |d ¡ |  |d ¡ |  |ddddœ¡ |  t  ||||¡d¡ d S )Nr†   Úyé   é   )r†   r%   r½   z(x=11, y=14))r2   ÚgetargvaluesrU   r²   rš   Úformatargvalues)r8   r   ÚvarargsÚvarkwÚlocalsr   r   r   Ú
test_frame@  s    zTestInterpreterStack.test_framec          	   C   sb   t  tjj¡\}}}}|  |ddddddg¡ |  |d¡ |  |d¡ |  t  ||||¡d	¡ d S )
Nr   r~   r   ÚdÚeÚfÚgÚhz-(a=7, b=8, c=9, d=3, e=4, f=5, *g=(), **h={}))r2   rÀ   rU   r²   Úf_backrš   rÁ   )r8   r   rÂ   rÃ   rÄ   r   r   r   Útest_previous_frameI  s    z(TestInterpreterStack.test_previous_frameN)	r/   r>   r?   r£   r§   r¹   r¼   rÅ   rÌ   r   r   r   r   r     s   		r   c               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )ÚGetSourceBaseNc          	   C   s*   t t | j¡ƒ}| ¡ | _W d Q R X d S )N)Úopenr2   ÚgetsourcefileÚfodderModuleÚreadÚsource)r8   Úfpr   r   r   ÚsetUpU  s    zGetSourceBase.setUpc             C   s.   | j  d¡}d ||d |… ¡|r(dnd S )NÚ
r   Ú )rÒ   Úsplitr!   )r8   ÚtopÚbottomÚlinesr   r   r   ÚsourcerangeY  s    zGetSourceBase.sourcerangec             C   s   |   t |¡|  ||¡¡ d S )N)rš   r2   Ú	getsourcerÛ   )r8   r;   rØ   rÙ   r   r   r   ÚassertSourceEqual]  s    zGetSourceBase.assertSourceEqual)r/   r>   r?   rÐ   rÔ   rÛ   rÝ   r   r   r   r   rÍ   Q  s   rÍ   c               @   sÌ   e Zd ZeZdd„ Zdd„ Ze e	j
jdkd¡dd„ ƒZe e	j
jdkd¡d	d
„ ƒZe ed¡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"d#„ Zd$d%„ Zd&S )'ÚTestRetrievingSourceCodec             C   s  t  tt j¡}|  |dtjfdtjfdtjfdtjfdtjfg¡ t  	dd„ |D ƒ¡}|  |t
dftjt
fftjtjtjffgtjt
fftjtjfftjtjtjffgggg¡ t  	d	d„ |D ƒd
¡}|  |t
dftjt
fftjt
fftjtjfftjtjtjffgggg¡ d S )NÚFesteringGobÚMalodorousPervertÚParrotDroppingsÚ	StupidGitZTitc             S   s   g | ]}|d  ‘qS )r   r   )Ú.0r“   r   r   r   ú
<listcomp>m  s    z<TestRetrievingSourceCode.test_getclasses.<locals>.<listcomp>r   c             S   s   g | ]}|d  ‘qS )r   r   )rã   r“   r   r   r   rä   |  s    T)r2   rƒ   rU   rA   rš   rß   rà   rá   râ   Úgetclasstreer|   )r8   ÚclassesÚtreer   r   r   Útest_getclassesd  s2    




z(TestRetrievingSourceCode.test_getclassesc             C   s6   t  tt j¡}|  |dtjfdtjfdtjfg¡ d S )Nr©   ÚlobbestrM   )r2   rƒ   rU   r6   rš   r©   ré   rM   )r8   Z	functionsr   r   r   Útest_getfunctions‰  s    z*TestRetrievingSourceCode.test_getfunctionsr   z)Docstrings are omitted with -O2 and abovec             C   s>   |   t t¡d¡ |   t tj¡d¡ |   t tj¡d¡ d S )NzA module docstring.zA longer,

indented

docstring.z$Another

docstring

containing

tabs)rš   r2   ÚgetdocrU   râ   r¤   r¥   )r8   r   r   r   Útest_getdoc  s
    z$TestRetrievingSourceCode.test_getdocc             C   s\   |   t tj¡d¡ |   t tjj¡d¡ |   t t ¡ j¡d¡ |   t tjj¡d¡ d S )NzA longer,

indented

docstring.z$Another

docstring

containing

tabszThe automatic gainsaying.)rš   r2   rë   rU   rß   r¥   Zcontradiction)r8   r   r   r   Útest_getdoc_inherited˜  s    z.TestRetrievingSourceCode.test_getdoc_inheritedztest requires docstringsc             C   sv   t j}|  |tƒtj¡ |  |tjƒtjj¡ |  |tƒ jƒtjj¡ |  |tjƒtjj¡ |  |tjƒtjj¡ d S )N)r2   Ú_finddocrš   r‘   Ú__doc__Úto_bytesÚ
from_bytesÚreal)r8   Zfinddocr   r   r   Útest_finddoc¤  s    z%TestRetrievingSourceCode.test_finddocc             C   s   |   t d¡d¡ d S )NzAn
    indented
    docstring.zAn
indented
docstring.)rš   r2   Úcleandoc)r8   r   r   r   Útest_cleandoc­  s    z&TestRetrievingSourceCode.test_cleandocc             C   sV   |   t t¡d¡ |   t tj¡d¡ tdddƒ}|  t |¡¡ |  t t¡¡ d S )Nz	# line 1
z
# line 20
zx=1z_non_existing_filename.pyr"   )rš   r2   ÚgetcommentsrU   râ   ÚcompileÚassertIsNoner{   )r8   Úcor   r   r   Útest_getcomments±  s
    z)TestRetrievingSourceCode.test_getcommentsc             C   s‚   |   t t¡t¡ |   t tj¡t¡ |   t tjj¡t¡ |   t tjj¡t¡ |   t t¡tjd ¡ |   t d t	¡t¡ d S )NÚbuiltins)
rš   r2   Ú	getmodulerU   râ   r¥   ÚstrrX   Úmodulesr¯   )r8   r   r   r   Útest_getmoduleº  s    z'TestRetrievingSourceCode.test_getmodulec             C   s8   t  | jjd¡}|  |jd d¡ |  |jd d¡ d S )Né2   r   z	# line 1
r   z'A module docstring.'
)r2   ÚgetframeinforÐ   r²   rš   r¶   )r8   Z
frame_infor   r   r   Ú test_getframeinfo_get_first_lineÈ  s    z9TestRetrievingSourceCode.test_getframeinfo_get_first_linec             C   s4   |   tjdd¡ |   tjdd¡ |   tjdd¡ d S )Né   r­   é   é3   éK   éL   )rÝ   r¤   r¥   rU   râ   ré   )r8   r   r   r   Útest_getsourceÍ  s    z'TestRetrievingSourceCode.test_getsourcec             C   s”   |   tt tj¡ƒt¡ |   tt tj¡ƒt¡ d}t	d|dƒ}|   t |¡d ¡ dd d|j
ftj|j
< z|   tt |¡ƒ|¡ W d tj|j
= X d S )Nz2_non_existing_filename_used_for_sourcefile_test.pyzx=1r"   r   ÚNone)rš   r   r2   rÏ   rU   rM   r¯   r¤   r¥   r÷   Úco_filenameÚ	linecacheÚcache)r8   Úfnrù   r   r   r   Útest_getsourcefileÒ  s    z+TestRetrievingSourceCode.test_getsourcefilec             C   s   |   t tj¡tj¡ d S )N)rš   r2   ÚgetfilerU   râ   r´   )r8   r   r   r   Útest_getfileÞ  s    z%TestRetrievingSourceCode.test_getfilec          	   C   sF   G dd„ dt ƒ}G dd„ d|d}|  t¡ t |¡ W d Q R X d S )Nc               @   s   e Zd Zedd„ ƒZdS )zFTestRetrievingSourceCode.test_getfile_class_without_module.<locals>.CMc             S   s   t ‚d S )N)ÚAttributeError)r“   r   r   r   r>   ã  s    zQTestRetrievingSourceCode.test_getfile_class_without_module.<locals>.CM.__module__N)r/   r>   r?   Úpropertyr   r   r   r   ÚCMâ  s   r  c               @   s   e Zd ZdS )zETestRetrievingSourceCode.test_getfile_class_without_module.<locals>.CN)r/   r>   r?   r   r   r   r   r€   æ  s   r€   )rŒ   )r]   ÚassertRaisesÚ	TypeErrorr2   r  )r8   r  r€   r   r   r   Ú!test_getfile_class_without_moduleá  s    z:TestRetrievingSourceCode.test_getfile_class_without_modulec          	   C   s8   G dd„ dƒ}|ƒ }|   t¡ t |¡ W d Q R X d S )Nc               @   s   e Zd Zdd„ ZdS )zDTestRetrievingSourceCode.test_getfile_broken_repr.<locals>.ErrorReprc             S   s   t dƒ‚d S )NZxyz)Ú	Exception)r8   r   r   r   Ú__repr__í  s    zMTestRetrievingSourceCode.test_getfile_broken_repr.<locals>.ErrorRepr.__repr__N)r/   r>   r?   r  r   r   r   r   Ú	ErrorReprì  s   r  )r  r  r2   r  )r8   r  Zerr   r   r   Útest_getfile_broken_reprë  s    z1TestRetrievingSourceCode.test_getfile_broken_reprc             C   sn   ddl m} d}||ƒ }tj|< d|_d|_td|jƒ |  t	 
|jj¡d¡ tj|= t	 tddd	ƒ¡ d S )
Nr   )Ú
ModuleTypeZ__inspect_dummyz<string>Údummyzdef x(): passza=10rÖ   Úsingle)r[   r  rX   rþ   r´   Ú
__loader__r"   Ú__dict__rš   r2   rÏ   r†   Ú__code__rü   r÷   )r8   r  ÚnameÚmr   r   r   Útest_getmodule_recursionó  s    z1TestRetrievingSourceCode.test_getmodule_recursionc                s\   d\‰ ‰t j‰d‡ ‡‡fdd„	}|t _z(i }ttˆˆ dƒ|ƒ t |d ¡ W dˆt _X dS )z4doctest monkeypatches linecache to enable inspection)z<test>zdef x(): pass
Nc                s"   | ˆ krˆj ddS ˆ| |ƒS d S )NT)Úkeepends)Ú
splitlines)r   Úmodule_globals)r  ÚgetlinesrÒ   r   r   Úmonkey  s    zHTestRetrievingSourceCode.test_proceed_with_fake_filename.<locals>.monkeyr  r†   )N)r  r'  r"   r÷   r2   rÜ   )r8   r(  Únsr   )r  r'  rÒ   r   Útest_proceed_with_fake_filenameþ  s    z8TestRetrievingSourceCode.test_proceed_with_fake_filenamec             C   s   |   tjjdd¡ d S )Né   rº   )rÝ   rU   r©   r   )r8   r   r   r   Útest_getsource_on_code_object  s    z6TestRetrievingSourceCode.test_getsource_on_code_objectN)r/   r>   r?   rU   rÐ   rè   rê   r¡   ÚskipIfrX   ÚflagsÚoptimizerì   rí   r   ró   rõ   rú   rÿ   r  r  r  r  r  r  r#  r*  r,  r   r   r   r   rÞ   a  s(   %		
rÞ   c               @   s    e Zd ZeZdd„ Zdd„ ZdS )Ú!TestGettingSourceOfToplevelFramesc             C   s   d | _ |  tjdd ¡ d S )Nr   )ÚmaxDiffrÝ   rU   Úcurrentframe)r8   r   r   r   Útest_range_toplevel_frame  s    z;TestGettingSourceOfToplevelFrames.test_range_toplevel_framec             C   s   |   tjdd ¡ d S )Nr   )rÝ   rU   rS   )r8   r   r   r   Ú#test_range_traceback_toplevel_frame  s    zETestGettingSourceOfToplevelFrames.test_range_traceback_toplevel_frameN)r/   r>   r?   rU   rÐ   r3  r4  r   r   r   r   r0    s   r0  c               @   s0   e Zd ZeZdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestDecoratorsc             C   s   |   tjdd¡ d S )Nr¿   é   )rÝ   Úmod2Úwrapped)r8   r   r   r   Útest_wrapped_decorator  s    z%TestDecorators.test_wrapped_decoratorc             C   s   |   tjdd¡ d S )Nr    é
   )rÝ   r7  Zgone)r8   r   r   r   Útest_replacing_decorator"  s    z'TestDecorators.test_replacing_decoratorc             C   s   |   tjdd¡ d S )Né‚   é„   )rÝ   r7  rò   )r8   r   r   r   Útest_getsource_unwrap%  s    z$TestDecorators.test_getsource_unwrapc             C   s   |   tjdd¡ d S )Néq   és   )rÝ   r7  Zfunc114)r8   r   r   r   Útest_decorator_with_lambda(  s    z)TestDecorators.test_decorator_with_lambdaN)	r/   r>   r?   r7  rÐ   r9  r;  r>  rA  r   r   r   r   r5    s
   r5  c               @   sP   e Zd Ze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 )ÚTestOnelinersc             C   s   |   tjdd¡ d S )Né   )rÝ   r7  Zoll)r8   r   r   r   Útest_oneline_lambda-  s    z!TestOneliners.test_oneline_lambdac             C   s   |   tjdd¡ d S )Né   é   )rÝ   r7  Ztll)r8   r   r   r   Útest_threeline_lambda1  s    z#TestOneliners.test_threeline_lambdac             C   s   |   tjdd¡ d S )Né!   é"   )rÝ   r7  Ztlli)r8   r   r   r   Útest_twoline_indented_lambda6  s    z*TestOneliners.test_twoline_indented_lambdac             C   s   |   tjdd¡ d S )Né%   )rÝ   r7  Zonelinefunc)r8   r   r   r   Útest_onelinefunc;  s    zTestOneliners.test_onelinefuncc             C   s   |   tjdd¡ d S )Né(   é)   )rÝ   r7  Zmanyargs)r8   r   r   r   Útest_manyargs?  s    zTestOneliners.test_manyargsc             C   s   |   tjdd¡ d S )Né,   é-   )rÝ   r7  Ztwolinefunc)r8   r   r   r   Útest_twolinefuncE  s    zTestOneliners.test_twolinefuncc             C   s   |   tjd dd¡ d S )Nr   é1   )rÝ   r7  r   )r8   r   r   r   Útest_lambda_in_listK  s    z!TestOneliners.test_lambda_in_listc             C   s   |   tjdd¡ d S )Né7   )rÝ   r7  Z	anonymous)r8   r   r   r   Útest_anonymousP  s    zTestOneliners.test_anonymousN)r/   r>   r?   r7  rÐ   rD  rG  rJ  rL  rO  rR  rT  rV  r   r   r   r   rB  +  s   rB  c               @   s   e Zd ZeZdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Ze eedƒ p^ej d¡d¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestBuggyCasesc             C   s   |   tjdd¡ d S )Né:   é;   )rÝ   r7  Zwith_comment)r8   r   r   r   Útest_with_commentX  s    z TestBuggyCases.test_with_commentc             C   s   |   tjd dd¡ d S )Nr   é?   é@   )rÝ   r7  Zmultiline_sig)r8   r   r   r   Útest_multiline_sig[  s    z!TestBuggyCases.test_multiline_sigc             C   s   |   t ¡ jdd¡ d S )NéG   éH   )rÝ   r7  Zfunc69Zfunc71)r8   r   r   r   Útest_nested_class^  s    z TestBuggyCases.test_nested_classc             C   s   |   tjdd¡ d S )NéM   )rÝ   r7  Zfunc77)r8   r   r   r   Ú#test_one_liner_followed_by_non_namea  s    z2TestBuggyCases.test_one_liner_followed_by_non_namec             C   s   |   tjjdd¡ d S )NéS   )rÝ   r7  Zcls82Zfunc83)r8   r   r   r   Útest_one_liner_dedent_non_named  s    z-TestBuggyCases.test_one_liner_dedent_non_namec             C   s   |   tjdd¡ d S )NéX   éZ   )rÝ   r7  Zfunc88)r8   r   r   r   Ú&test_with_comment_instead_of_docstringg  s    z5TestBuggyCases.test_with_comment_instead_of_docstringc             C   s   |   tjdd¡ d S )Né_   éa   )rÝ   r7  Zmethod_in_dynamic_class)r8   r   r   r   Útest_method_in_dynamic_classj  s    z+TestBuggyCases.test_method_in_dynamic_classr´   z.pyz,unicodedata is not an external binary modulec             C   s$   |   ttjt¡ |   ttjt¡ d S )N)r  ÚOSErrorr2   rÜ   ÚunicodedataÚ
findsource)r8   r   r   r   Útest_findsource_binaryo  s    z%TestBuggyCases.test_findsource_binaryc             C   sŽ   dg}t |d ddƒ}|  ttj|¡ |  ttj|¡ dd ||jftj|j< z0|  	t |¡|df¡ |  	t |¡|d ¡ W d tj|j= X d S )Nzx=1r   Z_dynamically_created_filer"   r   )
r÷   r  rk  r2   rm  rÜ   r
  r  r  rš   )r8   rÚ   rù   r   r   r   Ú!test_findsource_code_in_linecachev  s    z0TestBuggyCases.test_findsource_code_in_linecachec             C   s>   x8dD ]0}t d|dƒ}|  ttj|¡ |  ttj|¡ qW d S )N)rÖ   z<string>zx=1r"   )r÷   r  ÚIOErrorr2   rm  rÜ   )r8   Úfnamerù   r   r   r   Ú test_findsource_without_filename‚  s    
z/TestBuggyCases.test_findsource_without_filenamec             C   s   |   tjjdd¡ d S )Név   éw   )rÝ   r7  ZClassWithMethodÚmethod)r8   r   r   r   Útest_getsource_on_methodˆ  s    z'TestBuggyCases.test_getsource_on_methodc             C   s   |   tjjdd¡ d S )Néˆ   é‹   )rÝ   r7  Zcls135Zfunc136)r8   r   r   r   Útest_nested_func‹  s    zTestBuggyCases.test_nested_funcN)r/   r>   r?   r7  rÐ   rZ  r]  r`  rb  rd  rg  rj  r¡   r-  rZ   rl  r´   Úendswithrn  ro  rr  rv  ry  r   r   r   r   rW  U  s   
rW  c                   s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )Ú	TestNoEOLc          	      sz   t d | _t | j¡ ttj | jdtj ¡dƒ}| d¡ W d Q R X t	| jƒ dd l
}W d Q R X || _tƒ  ¡  d S )NZ_dirzinspect_fodder3%spyÚwzclass X:
    pass # No EOLr   )r   ÚtempdirÚosÚmkdirrÎ   Úpathr!   ÚextsepÚwriter   Zinspect_fodder3rÐ   ÚsuperrÔ   )r8   rÈ   Zmod3)Ú	__class__r   r   rÔ     s    
zTestNoEOL.setUpc             C   s   t  | j¡ d S )N)ÚshutilÚrmtreer}  )r8   r   r   r   ÚtearDown›  s    zTestNoEOL.tearDownc             C   s   |   | jjdd¡ d S )Nr   r   )rÝ   rÐ   ÚX)r8   r   r   r   Ú
test_classž  s    zTestNoEOL.test_class)r/   r>   r?   rÔ   r‡  r‰  Ú__classcell__r   r   )r„  r   r{    s   r{  c               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú_BrokenDataDescriptorz2
    A broken data descriptor. See bug #1785.
    c              G   s   t dƒ‚d S )Nzbroken data descriptor)r  )r   r   r   r   Ú__get__¦  s    z_BrokenDataDescriptor.__get__c              G   s   t ‚d S )N)ÚRuntimeError)r   r   r   r   Ú__set__©  s    z_BrokenDataDescriptor.__set__c              G   s   t dƒ‚d S )Nzbroken data descriptor)r  )r   r   r   r   ry   ¬  s    z!_BrokenDataDescriptor.__getattr__N)r/   r>   r?   rï   rŒ  rŽ  ry   r   r   r   r   r‹  ¢  s   r‹  c               @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú_BrokenMethodDescriptorz4
    A broken method descriptor. See bug #1785.
    c              G   s   t dƒ‚d S )Nzbroken method descriptor)r  )r   r   r   r   rŒ  ´  s    z_BrokenMethodDescriptor.__get__c              G   s   t dƒ‚d S )Nzbroken method descriptor)r  )r   r   r   r   ry   ·  s    z#_BrokenMethodDescriptor.__getattr__N)r/   r>   r?   rï   rŒ  ry   r   r   r   r   r  °  s   r  c             C   s   dd„ t  | ¡D ƒS )Nc             S   s   g | ]}|d d… ‘qS )Nr¬   r   )rã   Útr   r   r   rä   ½  s    z!attrs_wo_objs.<locals>.<listcomp>)r2   Úclassify_class_attrs)r“   r   r   r   Úattrs_wo_objs¼  s    r’  c               @   s  e Zd Zdd„ Zd5dd„Zdddg di dfdd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
e ed¡dd„ ƒZee ed¡dd„ ƒƒZee ed¡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-d.„ Zd/d0„ Zd1d2„ Zd3d4„ ZdS )6ÚTestClassesAndFunctionsc             C   sj   G dd„ dt ƒ}G dd„ d|ƒ}G dd„ d|ƒ}G dd„ d||ƒ}||||t f}t |¡}|  ||¡ d S )	Nc               @   s   e Zd ZdS )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.AN)r/   r>   r?   r   r   r   r   ÚAÃ  s    r”  c               @   s   e Zd ZdS )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.BN)r/   r>   r?   r   r   r   r   ÚBÄ  s    r•  c               @   s   e Zd ZdS )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.CN)r/   r>   r?   r   r   r   r   r€   Å  s    r€   c               @   s   e Zd ZdS )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.DN)r/   r>   r?   r   r   r   r   ÚDÆ  s    r–  )r|   r2   Úgetmrorš   )r8   r”  r•  r€   r–  ÚexpectedZgotr   r   r   Útest_newstyle_mroÁ  s    
z)TestClassesAndFunctions.test_newstyle_mroNc          	   C   s’   |   t¡ t |¡\}}}	}
W d Q R X |  ||¡ |  ||¡ |  |	|¡ |  |
|¡ |d k	rŽ|   t¡ |  t |||	|
¡|¡ W d Q R X d S )N)ÚassertWarnsÚDeprecationWarningr2   Ú
getargspecrš   Úformatargspec)r8   ÚroutineÚargs_eÚ	varargs_eÚvarkw_eÚ
defaults_eÚ	formattedr   rÂ   rÃ   Údefaultsr   r   r   ÚassertArgSpecEqualsÌ  s    z+TestClassesAndFunctions.assertArgSpecEqualsc
             C   s¬   t  |¡\}
}}}}}}|  |
|¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |	d k	r¨|  t¡$ |  t  |
||||||¡|	¡ W d Q R X d S )N)r2   Úgetfullargspecrš   rš  r›  r  )r8   rž  rŸ  r   r¡  r¢  Úkwonlyargs_eÚkwonlydefaults_eÚann_er£  r   rÂ   rÃ   r¤  Ú
kwonlyargsÚkwonlydefaultsÚannr   r   r   ÚassertFullArgSpecEqualsÙ  s    z/TestClassesAndFunctions.assertFullArgSpecEqualsc          	   C   sx   | j tjddgdd |   tjddddd	d
gdddd¡ |  t| j tjg ¡ |  t| j tjg ¡ |  t| j tj	g ¡ d S )Nr†   r½   z(x, y))r£  r   r~   r   rÆ   rÇ   rÈ   rÉ   rÊ   )r¬   é   rŽ   z!(a, b, c, d=3, e=4, f=5, *g, **h))
r¥  rU   r©   rM   r  Ú
ValueErrorr7  Ú	keywordedÚ	annotatedÚkeyword_only_arg)r8   r   r   r   Útest_getargspecì  s    




z'TestClassesAndFunctions.test_getargspecc             C   sR   | j tjg ddgddidd | j tjdgdtidd | j tjg dgd	d
 d S )NÚarg1Úarg2r   z(*arg1, arg2=1))r   r§  r¨  r£  z(arg1: list))r©  r£  Úargz(*, arg))r§  r£  )r­  r7  r°  r±  r{   r²  )r8   r   r   r   Útest_getfullargspecý  s    
z+TestClassesAndFunctions.test_getfullargspecc                sÖ   t  tj¡dd„ ƒ}ˆ j|ddgdd ˆ j|ddgdd ˆ jt  |¡ddgdd ‡ fdd„}G d	d
„ d
ƒ}||ƒ ƒ ||jƒ ||ƒ jƒ ||jƒ ||ƒ jƒ G dd„ dƒ}||ƒ G dd„ dƒ}||ƒ d S )Nc             S   s   d S )Nr   )r†   r½   r   r   r   Úham  s    zETestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.hamr†   r½   z(x, y))r£  c                s   ˆ j | dddgdd d S )Nr8   r†   r½   z(self, x, y))r£  )r¥  )rÈ   )r8   r   r   Úcheck_method  s    zNTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.check_methodc               @   s>   e Zd Ze ej¡dd„ ƒZe e¡Z	e ej¡dd„ ƒZ
dS )zCTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.Cc             S   s   d S )Nr   )r8   r†   r½   r   r   r   r¸    s    zGTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C.hamc             S   s   d S )Nr   )r8   r†   r½   r   r   r   Ú__call__  s    zLTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C.__call__N)r/   r>   r?   Ú	functoolsÚwrapsrU   rM   r¸  ÚpartialmethodÚphamrº  r   r   r   r   r€     s   
r€   c               @   s    e Zd Ze ej¡dd„ ƒZdS )zGTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_newc             S   s   d S )Nr   )r8   r†   r½   r   r   r   Ú__new__'  s    zOTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_new.__new__N)r/   r>   r?   r»  r¼  rU   rM   r¿  r   r   r   r   ÚC_new&  s   rÀ  c               @   s    e Zd Ze ej¡dd„ ƒZdS )zHTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_initc             S   s   d S )Nr   )r8   r†   r½   r   r   r   r£   -  s    zQTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_init.__init__N)r/   r>   r?   r»  r¼  rU   rM   r£   r   r   r   r   ÚC_init,  s   rÁ  )	r»  r¼  rU   rM   r¥  r­  Úpartialr¸  r¾  )r8   r¸  r¹  r€   rÀ  rÁ  r   )r8   r   Ú test_argspec_api_ignores_wrapped
  s     


z8TestClassesAndFunctions.test_argspec_api_ignores_wrappedc             C   s>   dd„ }t  dt jj¡}t j|fd|_| j|dgdd d S )Nc               S   s   d S )Nr   r   r   r   r   Útest3  s    zHTestClassesAndFunctions.test_getfullargspec_signature_attr.<locals>.testrM   )r#   z(spam))rŸ  r£  )r2   Ú	ParameterÚPOSITIONAL_ONLYÚ	SignatureÚ__signature__r­  )r8   rÄ  Z
spam_paramr   r   r   Ú"test_getfullargspec_signature_attr2  s    z:TestClassesAndFunctions.test_getfullargspec_signature_attrc             C   sP   dddœdd„}t  |¡}|  |j|j¡ dd„ }t  |¡}|  |j|j¡ d S )NrM   r¸  )r   Úreturnc             S   s   d S )Nr   )r   r   r   r   rÄ  ;  rn   zITestClassesAndFunctions.test_getfullargspec_signature_annos.<locals>.testc               S   s   d S )Nr   r   r   r   r   rÄ  ?  rn   )r2   r¦  rš   Ú__annotations__Úannotations)r8   rÄ  Úspecr   r   r   Ú#test_getfullargspec_signature_annos:  s    

z;TestClassesAndFunctions.test_getfullargspec_signature_annosz6Signature information for builtins requires docstringsc             C   s^   | j tjjddgdd | j t t ¡ ¡jddgdd | j tjdgddgd dd	œd
d d S )Nr8   r;   z(self, obj))rŸ  r£  r€  Údir_fdÚfollow_symlinksT)rÏ  rÐ  z,(path, *, dir_fd=None, follow_symlinks=True))rŸ  r§  r¨  r£  )r­  Ú_pickleÚPicklerÚdumpÚioÚBytesIOr~  Ústat)r8   r   r   r   Ú#test_getfullargspec_builtin_methodsC  s    
z;TestClassesAndFunctions.test_getfullargspec_builtin_methodsc             C   s.   dd l }|j}t |¡}|  |jd d¡ d S )Nr   Úavocado)Ú	_testcapiÚ&docstring_with_signature_with_defaultsr2   r¦  rš   r¤  )r8   rÙ  ÚbuiltinrÍ  r   r   r   Ú test_getfullagrspec_builtin_funcS  s    
z8TestClassesAndFunctions.test_getfullagrspec_builtin_funcc          	   C   s2   dd l }|j}|  t¡ t |¡ W d Q R X d S )Nr   )rÙ  Údocstring_no_signaturer  r  r2   r¦  )r8   rÙ  rÛ  r   r   r   Ú-test_getfullagrspec_builtin_func_no_signature\  s    zETestClassesAndFunctions.test_getfullagrspec_builtin_func_no_signaturec             C   sf   x@t ƒ D ]6}t |¡}t|jƒ}t|ƒ}|  |¡ |  ||¡ qW t t¡}t|jƒ}|  |t	¡ d S )N)
r(   r2   r¦  r{   rª  Úsortedr.   rš   r+   Ú unsorted_keyword_only_parameters)r8   r  Ú	signatureÚlÚsorted_lr   r   r   Ú8test_getfullargspec_definition_order_preserved_on_kwonlye  s    




zPTestClassesAndFunctions.test_getfullargspec_definition_order_preserved_on_kwonlyc             C   s$   G dd„ dt ƒ}|  |jdg¡ d S )Nc               @   s   e Zd Zdd„ ZdS )z9TestClassesAndFunctions.test_getargspec_method.<locals>.Ac             S   s   d S )Nr   )r8   r   r   r   r"  r  s    z;TestClassesAndFunctions.test_getargspec_method.<locals>.A.mN)r/   r>   r?   r"  r   r   r   r   r”  q  s   r”  r8   )r|   r¥  r"  )r8   r”  r   r   r   Útest_getargspec_methodp  s    z.TestClassesAndFunctions.test_getargspec_methodc             C   s  G dd„ dt ƒ}t|ƒ}|  ddt f|d¡ |  ddt f|d¡ |  d	d|f|d
¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d| ¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ G dd„ d|ƒ}t|ƒ}|  d	d|f|d
¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ G dd„ d|ƒ}t|ƒ}|  d	d|f|d
¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ G d d!„ d!||ƒ}t|ƒ}|  d	d|f|d
¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ |  dd|f|d¡ d S )"Nc               @   s\   e Zd Zdd„ ZeeƒZdd„ ZeeƒZdd„ ZeeƒZ	dd„ Z
d	d
„ ZdZeƒ Zeƒ ZdS )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Ac               S   s   d S )Nr   r   r   r   r   Úsy  rn   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.A.sc             S   s   d S )Nr   )r“   r   r   r   r   |  rn   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.A.cc             S   s   d S )Nr   )r8   r   r   r   Úgetp  rn   z>TestClassesAndFunctions.test_classify_newstyle.<locals>.A.getpc             S   s   d S )Nr   )r8   r   r   r   r"  ‚  rn   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.A.mc             S   s   d S )Nr   )r8   r   r   r   Úm1„  rn   z<TestClassesAndFunctions.test_classify_newstyle.<locals>.A.m1Ú1N)r/   r>   r?   ræ  Ústaticmethodr   Úclassmethodrç  r  r%   r"  rè  Údatablobr‹  Úddr  Úmdr   r   r   r   r”  w  s   r”  r¿  zstatic methodzmissing __new__r£   ru  zmissing __init__ræ  zmissing static methodr   zclass methodzmissing class methodr%   r  zmissing propertyr"  zmissing plain method: %rrè  zmissing plain methodrì  Údatazmissing datarî  zmissing method descriptorrí  zmissing data descriptorc               @   s   e Zd Zdd„ ZdS )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Bc             S   s   d S )Nr   )r8   r   r   r   r"    rn   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.B.mN)r/   r>   r?   r"  r   r   r   r   r•  ›  s   r•  c               @   s   e Zd Zdd„ Zdd„ ZdS )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Cc             S   s   d S )Nr   )r8   r   r   r   r"  ¬  rn   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.C.mc             S   s   d S )Nr   )r8   r   r   r   r   ­  rn   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.C.cN)r/   r>   r?   r"  r   r   r   r   r   r€   ª  s   r€   c               @   s   e Zd Zdd„ ZdS )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Dc             S   s   d S )Nr   )r8   r   r   r   rè  »  rn   z<TestClassesAndFunctions.test_classify_newstyle.<locals>.D.m1N)r/   r>   r?   rè  r   r   r   r   r–  ¹  s   r–  )r|   r’  r„   )r8   r”  Úattrsr•  r€   r–  r   r   r   Útest_classify_newstylev  sX    
z.TestClassesAndFunctions.test_classify_newstylec             C   s    x.t tƒD ]"}tt|ƒ}t|tƒr
t |¡ q
W ttƒ}|  	ddtf|d¡ |  	ddt
f|d¡ |  	ddt
f|d	¡ |  	d
dt
f|d	¡ |  	ddtf|d	¡ d S )Nr¿  zstatic methodzmissing __new__rñ   zclass methodzmissing class methodrð   ru  zmissing plain methodÚ__add__Ú__and__)ÚdirÚ__builtins__ÚgetattrÚ
isinstancer]   r2   r‘  r’  Úboolr„   r‘   )r8   r!  rÛ  rð  r   r   r   Útest_classify_builtin_typesÇ  s    

z3TestClassesAndFunctions.test_classify_builtin_typesc             C   sp   G dd„ dt ƒ}G dd„ d|d}t dd||jd ¡}|  |t |¡¡ t dd|d¡}|  |t |¡¡ d S )	Nc                   s   e Zd Z‡ fdd„Z‡  ZS )zITestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.Metac                s   |dkrdS t ƒ  |¡S )Nr¸  rM   )rƒ  ry   )r8   r!  )r„  r   r   ry   Ý  s    zUTestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.Meta.__getattr__)r/   r>   r?   ry   rŠ  r   r   )r„  r   ÚMetaÜ  s   rú  c               @   s   e Zd Zejdd„ ƒZdS )zGTestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.VAc             S   s   dS )Nr©   r   )r8   r   r   r   r¸  â  s    zKTestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.VA.hamN)r/   r>   r?   r[   ÚDynamicClassAttributer¸  r   r   r   r   ÚVAá  s   rü  )rŒ   r¸  rï  rM   )r]   r2   Ú	Attributer  r„   r‘  )r8   rú  rü  Zshould_find_dcaZshould_find_gar   r   r   Ú#test_classify_DynamicClassAttributeÛ  s    z;TestClassesAndFunctions.test_classify_DynamicClassAttributec                sP   G ‡ fdd„dt ƒ‰ G ‡ fdd„dt ƒ}t dd||j¡}|  |t |¡¡ d S )Nc                   s    e Zd Z‡ fdd„Zdd„ ZdS )zDTestClassesAndFunctions.test_classify_overrides_bool.<locals>.NoBoolc                s   ˆ ƒ S )Nr   )r8   r<   )ÚNoBoolr   r   rQ   ì  s    zKTestClassesAndFunctions.test_classify_overrides_bool.<locals>.NoBool.__eq__c             S   s   t dƒ‚d S )Nz,This object does not specify a boolean value)ÚNotImplementedError)r8   r   r   r   Ú__bool__ï  s    zMTestClassesAndFunctions.test_classify_overrides_bool.<locals>.NoBool.__bool__N)r/   r>   r?   rQ   r  r   )rÿ  r   r   rÿ  ë  s   rÿ  c                   s   e Zd Z” ƒ ZdS )zCTestClassesAndFunctions.test_classify_overrides_bool.<locals>.HasNBN)r/   r>   r?   rí  r   )rÿ  r   r   ÚHasNBó  s   r  rí  rï  )r|   r2   rý  rí  r„   r‘  )r8   r  Zshould_find_attrr   )rÿ  r   Útest_classify_overrides_boolê  s    z4TestClassesAndFunctions.test_classify_overrides_boolc             C   sH   G dd„ dt ƒ}G dd„ d|d}t dd|d¡}|  |t |¡¡ d S )	Nc               @   s   e Zd ZdZdd„ ZdS )zMTestClassesAndFunctions.test_classify_metaclass_class_attribute.<locals>.MetaÚslapc             S   s   ddddgS )Nr„  r>   r/   Úfishr   )r8   r   r   r   Ú__dir__ü  s    zUTestClassesAndFunctions.test_classify_metaclass_class_attribute.<locals>.Meta.__dir__N)r/   r>   r?   r  r  r   r   r   r   rú  ú  s   rú  c               @   s   e Zd ZdS )zNTestClassesAndFunctions.test_classify_metaclass_class_attribute.<locals>.ClassN)r/   r>   r?   r   r   r   r   ÚClassþ  s   r  )rŒ   r  rï  r  )r]   r2   rý  r„   r‘  )r8   rú  r  Úshould_findr   r   r   Ú'test_classify_metaclass_class_attributeù  s    z?TestClassesAndFunctions.test_classify_metaclass_class_attributec             C   sH   G dd„ dt ƒ}G dd„ d|d}t dd|d¡}|  |t |¡¡ d S )	Nc                   s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )zDTestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.Metac             S   s   ddddgS )Nr„  r>   r/   ÚBOOMr   )r“   r   r   r   r    s    zLTestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.Meta.__dir__c                s   |dkrdS t ƒ  |¡S )Nr
  r   )rƒ  Z_Meta__getattr)r8   r!  )r„  r   r   ry     s    zPTestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.Meta.__getattr__)r/   r>   r?   r  ry   rŠ  r   r   )r„  r   rú    s   rú  c               @   s   e Zd ZdS )zETestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.ClassN)r/   r>   r?   r   r   r   r   r    s   r  )rŒ   r
  rï  r   )r]   r2   rý  r„   r‘  )r8   rú  r  r  r   r   r   Útest_classify_VirtualAttribute  s    z6TestClassesAndFunctions.test_classify_VirtualAttributec       	         s¼   G dd„ dt ƒ‰ G dd„ dt ƒ‰G ‡ ‡fdd„dˆ ˆƒ}G dd„ dˆ d	}G d
d„ d||d	}t ddˆ d¡}t ddˆd¡}t dd|d¡}t |¡}x|||fD ]}|  ||¡ q¤W d S )Nc                   s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )zSTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta1c             S   s   ddddgS )Nr„  r>   r/   Úoner   )r“   r   r   r   r    s    z[TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta1.__dir__c                s   |dkrdS t ƒ  |¡S )Nr  r   )rƒ  ry   )r8   r!  )r„  r   r   ry     s    z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta1.__getattr__)r/   r>   r?   r  ry   rŠ  r   r   )r„  r   ÚMeta1  s   r  c                   s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )zSTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta2c             S   s   ddddgS )Nr„  r>   r/   Útwor   )r“   r   r   r   r    s    z[TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta2.__dir__c                s   |dkrdS t ƒ  |¡S )Nr  r   )rƒ  ry   )r8   r!  )r„  r   r   ry     s    z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta2.__getattr__)r/   r>   r?   r  ry   rŠ  r   r   )r„  r   ÚMeta2  s   r  c                   s*   e Zd Z‡‡fdd„Z‡ fdd„Z‡  ZS )zSTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta3c                s,   t ttddddgˆ  | ¡ ˆ | ¡ ƒƒƒS )Nr„  r>   r/   Úthree)r{   rß  r1   r  )r“   )r  r  r   r   r     s    z[TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta3.__dir__c                s   |dkrdS t ƒ  |¡S )Nr  r¬   )rƒ  ry   )r8   r!  )r„  r   r   ry   #  s    z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta3.__getattr__)r/   r>   r?   r  ry   rŠ  r   )r  r  )r„  r   ÚMeta3  s   r  c               @   s   e Zd ZdS )zTTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Class1N)r/   r>   r?   r   r   r   r   ÚClass1'  s   r  )rŒ   c               @   s   e Zd ZdS )zTTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Class2N)r/   r>   r?   r   r   r   r   ÚClass2)  s   r  r  rï  r   r  r   r  r¬   )r]   r2   rý  r‘  r„   )	r8   r  r  r  Zshould_find1Zshould_find2Zshould_find3ZccaZsfr   )r  r  r   Ú,test_classify_VirtualAttribute_multi_classes  s    
zDTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classesc             C   sF   G dd„ dt ƒ}G dd„ d|d}dd„ t |¡D ƒ}|  d|¡ d S )	Nc               @   s   e Zd Zdd„ ZdS )zKTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.Mc             S   s
   dddgS )Nr„  r/   Úmissingr   )r“   r   r   r   r  5  s    zSTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.M.__dir__N)r/   r>   r?   r  r   r   r   r   ÚM4  s   r  c               @   s   e Zd ZdS )zKTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.CN)r/   r>   r?   r   r   r   r   r€   7  s   r€   )rŒ   c             S   s   g | ]}|d  ‘qS )r   r   )rã   r   r   r   r   rä   9  s    zTTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.<listcomp>r  )r]   r2   r‘  r…   )r8   r  r€   rð  r   r   r   Ú(test_classify_class_attrs_with_buggy_dir3  s    z@TestClassesAndFunctions.test_classify_class_attrs_with_buggy_dirc             C   sÀ   G dd„ dt ƒ}dd„ }|tjƒ}|tjƒ}|  t ||¡d|jd fg¡ |  t ||¡d|jd fg¡ G dd„ d|ƒ}|  t ||¡d|jd fg¡ |  t ||¡d|jd fg¡ d S )	Nc               @   s   e Zd Zeƒ Zeƒ ZdS )z>TestClassesAndFunctions.test_getmembers_descriptors.<locals>.AN)r/   r>   r?   r‹  rí  r  rî  r   r   r   r   r”  =  s   r”  c                s"   G dd„ dt ƒ‰ ‡ ‡fdd„}|S )Nc               @   s   e Zd ZdS )zXTestClassesAndFunctions.test_getmembers_descriptors.<locals>.pred_wrapper.<locals>.EmptyN)r/   r>   r?   r   r   r   r   ÚEmptyD  s   r  c                s$   dt | ƒkrtˆ | jƒrdS ˆ| ƒS )Nr/   F)rô  rZ   r/   )r†   )r  Úpredr   r   r8  F  s    zZTestClassesAndFunctions.test_getmembers_descriptors.<locals>.pred_wrapper.<locals>.wrapped)r|   )r  r8  r   )r  r  r   Úpred_wrapperA  s    zITestClassesAndFunctions.test_getmembers_descriptors.<locals>.pred_wrapperrî  rí  c               @   s   e Zd ZdS )z>TestClassesAndFunctions.test_getmembers_descriptors.<locals>.BN)r/   r>   r?   r   r   r   r   r•  T  s   r•  )r|   r2   Úismethoddescriptorr`   rš   rƒ   r  )r8   r”  r  r  r`   r•  r   r   r   Útest_getmembers_descriptors<  s    

z3TestClassesAndFunctions.test_getmembers_descriptorsc             C   s€   G dd„ dƒ}|   d|jft |¡¡ |  d|jft |tj¡¡ |ƒ }|   d|jft |¡¡ |   d|jft |tj¡¡ d S )Nc               @   s   e Zd Zdd„ ZdS )z9TestClassesAndFunctions.test_getmembers_method.<locals>.Bc             S   s   d S )Nr   )r8   r   r   r   rÈ   ^  s    z;TestClassesAndFunctions.test_getmembers_method.<locals>.B.fN)r/   r>   r?   rÈ   r   r   r   r   r•  ]  s   r•  rÈ   )r„   rÈ   r2   rƒ   r…   rD   )r8   r•  r~   r   r   r   Útest_getmembers_method\  s    z.TestClassesAndFunctions.test_getmembers_methodc             C   sL   G dd„ dt ƒ}G dd„ d|d}|  dt |¡¡ |  dt |ƒ ¡¡ d S )Nc                   s   e Zd Z‡ fdd„Z‡  ZS )zCTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.Mc                s   |dkrdS t ƒ  |¡S )Nr©   Ú	scrambled)rƒ  ry   )r“   r!  )r„  r   r   ry   i  s    zOTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.M.__getattr__)r/   r>   r?   ry   rŠ  r   r   )r„  r   r  h  s   r  c               @   s   e Zd Zejdd„ ƒZdS )zCTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.Ac             S   s   dS )NrM   r   )r8   r   r   r   r©   n  s    zHTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.A.eggsN)r/   r>   r?   r[   rû  r©   r   r   r   r   r”  m  s   r”  )rŒ   )r©   r  )r©   rM   )r]   r„   r2   rƒ   )r8   r  r”  r   r   r   Ú test_getmembers_VirtualAttributeg  s    z8TestClassesAndFunctions.test_getmembers_VirtualAttributec             C   sF   G dd„ dt ƒ}G dd„ d|d}dd„ t |¡D ƒ}|  d|¡ d S )	Nc               @   s   e Zd Zdd„ ZdS )zATestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.Mc             S   s
   dddgS )Nr„  r/   r  r   )r“   r   r   r   r  v  s    zITestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.M.__dir__N)r/   r>   r?   r  r   r   r   r   r  u  s   r  c               @   s   e Zd ZdS )zATestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.CN)r/   r>   r?   r   r   r   r   r€   x  s   r€   )rŒ   c             S   s   g | ]}|d  ‘qS )r   r   )rã   r   r   r   r   rä   z  s    zJTestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.<listcomp>r  )r]   r2   rƒ   r…   )r8   r  r€   rð  r   r   r   Útest_getmembers_with_buggy_dirt  s    z6TestClassesAndFunctions.test_getmembers_with_buggy_dir)NNNN) 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  r  r  r  r  r  r   r   r   r   r   r“  À  sD    
(	Q
#	 r“  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S )ÚTestGetClosureVarsc             C   sV   dd„ }t ƒ }d|i}dti}dti}dh}t ||||¡}|  t ||ƒ¡|¡ d S )Nc                s   ‡ fdd„}|S )Nc                s   t | ˆ ttƒ d S )N)ÚprintÚ_global_refÚunbound_ref)Ú	local_ref)Únonlocal_refr   r   rÉ   „  s    z=TestGetClosureVars.test_name_resolution.<locals>.f.<locals>.gr   )r&  rÉ   r   )r&  r   rÈ   ƒ  s    z2TestGetClosureVars.test_name_resolution.<locals>.fr&  r#  r"  r$  )r|   r#  r"  r2   ÚClosureVarsrš   Úgetclosurevars)r8   rÈ   Ú_argÚnonlocal_varsÚglobal_varsÚbuiltin_varsÚunbound_namesr˜  r   r   r   Útest_name_resolution  s    z'TestGetClosureVars.test_name_resolutionc             C   sV   dd„ }t ƒ }d|i}dti}dti}dh}t ||||¡}|  t ||ƒ¡|¡ d S )Nc                s   ‡ fdd„}|S )Nc             3   s   t | ˆ ttƒ d V  d S )N)r"  r#  r$  )r%  )r&  r   r   rÉ   ’  s    z?TestGetClosureVars.test_generator_closure.<locals>.f.<locals>.gr   )r&  rÉ   r   )r&  r   rÈ   ‘  s    z4TestGetClosureVars.test_generator_closure.<locals>.fr&  r#  r"  r$  )r|   r#  r"  r2   r'  rš   r(  )r8   rÈ   r)  r*  r+  r,  r-  r˜  r   r   r   Útest_generator_closure  s    z)TestGetClosureVars.test_generator_closurec             C   s`   G dd„ dƒ}t ƒ }d|i}dti}dti}dh}t ||||¡}|  t |ƒ  |¡¡|¡ d S )Nc               @   s   e Zd Zdd„ ZdS )z1TestGetClosureVars.test_method_closure.<locals>.Cc                s   ‡ fdd„}|S )Nc                s   t | ˆ ttƒ d S )N)r"  r#  r$  )r%  )r&  r   r   rÉ   ¢  s    z>TestGetClosureVars.test_method_closure.<locals>.C.f.<locals>.gr   )r8   r&  rÉ   r   )r&  r   rÈ   ¡  s    z3TestGetClosureVars.test_method_closure.<locals>.C.fN)r/   r>   r?   rÈ   r   r   r   r   r€      s   r€   r&  r#  r"  r$  )r|   r#  r"  r2   r'  rš   r(  rÈ   )r8   r€   r)  r*  r+  r,  r-  r˜  r   r   r   Útest_method_closureŸ  s    z&TestGetClosureVars.test_method_closurec                s¼   dd„ ‰dd„ }dd„ }dd„ }‡ fd	d
„‰ ‡ ‡‡fdd„}|dƒ}|dƒ}||dƒ}ˆ  ˆ|ƒddi¡ ˆ  ˆ|ƒddi¡ ˆ  ˆ|ƒd|dœ¡ ˆ  ˆdd„ dƒƒddi¡ ˆ |ƒ d S )Nc             S   s   t  | ¡jS )N)r2   r(  Ú	nonlocals)rÈ   r   r   r   Ú_nonlocal_vars°  s    z=TestGetClosureVars.test_nonlocal_vars.<locals>._nonlocal_varsc                s   ‡ fdd„}|S )Nc                s   ˆ |  S )Nr   )r½   )r†   r   r   Úadd´  s    zFTestGetClosureVars.test_nonlocal_vars.<locals>.make_adder.<locals>.addr   )r†   r3  r   )r†   r   Ú
make_adder³  s    z9TestGetClosureVars.test_nonlocal_vars.<locals>.make_adderc                s   ‡ ‡fdd„S )Nc                s
   ˆˆ | ƒS )Nr   )rµ  )r´  Úfuncr   r   rr   ¹  rn   zFTestGetClosureVars.test_nonlocal_vars.<locals>.curry.<locals>.<lambda>r   )r5  r´  r   )r´  r5  r   Úcurry¸  s    z4TestGetClosureVars.test_nonlocal_vars.<locals>.curryc             S   s   | |k S )Nr   )r   r~   r   r   r   Ú	less_than»  s    z8TestGetClosureVars.test_nonlocal_vars.<locals>.less_thanc                s   ‡ fdd„}|ˆ_ ||ƒS )Nc                s   ˆ‡ fdd„ƒS )Nc                s   ˆ ˆ ƒ| ƒS )Nr   )r†   )rÈ   r   r   rr   Á  rn   zMTestGetClosureVars.test_nonlocal_vars.<locals>.Y.<locals>.g.<locals>.<lambda>r   )rÈ   )Úle)rÈ   r   rÉ   À  s    z;TestGetClosureVars.test_nonlocal_vars.<locals>.Y.<locals>.g)Úg_ref)r8  rÉ   )ÚY)r8  r   r:  ¿  s    z0TestGetClosureVars.test_nonlocal_vars.<locals>.Yc                s   ˆ  ˆ| ƒdˆ ji¡ d S )NrÈ   )rš   r9  )r5  )r:  r2  r8   r   r   Úcheck_y_combinatorÅ  s    zATestGetClosureVars.test_nonlocal_vars.<locals>.check_y_combinatorr   r   rŽ   r†   )r´  r5  c                s   ‡ fdd„S )Nc                s   ˆ |  S )Nr   )r½   )r†   r   r   rr   Ð  rn   zITestGetClosureVars.test_nonlocal_vars.<locals>.<lambda>.<locals>.<lambda>r   )r†   r   )r†   r   rr   Ð  rn   z7TestGetClosureVars.test_nonlocal_vars.<locals>.<lambda>r¬   )rš   )r8   r4  r6  r7  r;  ZincZadd_twoZgreater_than_fiver   )r:  r2  r8   r   Útest_nonlocal_vars®  s     


z%TestGetClosureVars.test_nonlocal_varsc             C   sF   dd„ }t  i i i tƒ ¡}|  t  dd„ ¡|¡ |  t  |¡|¡ d S )Nc               S   s   d S )Nr   r   r   r   r   r   Õ  rn   z9TestGetClosureVars.test_getclosurevars_empty.<locals>.fooc               S   s   dS )NTr   r   r   r   r   rr   ×  rn   z>TestGetClosureVars.test_getclosurevars_empty.<locals>.<lambda>)r2   r'  r1   rš   r(  )r8   r   Ú_emptyr   r   r   Útest_getclosurevars_emptyÔ  s    z,TestGetClosureVars.test_getclosurevars_emptyc             C   sB   G dd„ dƒ}|   ttjd¡ |   ttjt¡ |   ttji ¡ d S )Nc               @   s   e Zd ZdS )z7TestGetClosureVars.test_getclosurevars_error.<locals>.TN)r/   r>   r?   r   r   r   r   ÚTÛ  s    r?  r   )r  r  r2   r(  r{   )r8   r?  r   r   r   Útest_getclosurevars_errorÚ  s    z,TestGetClosureVars.test_getclosurevars_errorc             C   s   d}i }t ||ƒ |d |fS )Nzdef f(): print(path)rÈ   )r"   )r8   Úcoder)  r   r   r   Ú_private_globalsà  s    
z#TestGetClosureVars._private_globalsc             C   sD   |   ¡ \}}| dd ¡ t i i dtidh¡}|  t |¡|¡ d S )Nrõ  r"  r€  )rB  Úpopr2   r'  r"  rš   r(  )r8   rÈ   r)  r˜  r   r   r   Útest_builtins_fallbackæ  s    z)TestGetClosureVars.test_builtins_fallbackc             C   sD   |   ¡ \}}ddi|d< t i i ddidh¡}|  t |¡|¡ d S )Nr€  r   rõ  r"  )rB  r2   r'  rš   r(  )r8   rÈ   r)  r˜  r   r   r   Útest_builtins_as_dictì  s    z(TestGetClosureVars.test_builtins_as_dictc             C   sB   |   ¡ \}}t|d< t i i dtjidh¡}|  t |¡|¡ d S )Nrõ  r€  r"  )rB  r~  r2   r'  r€  rš   r(  )r8   rÈ   r)  r˜  r   r   r   Útest_builtins_as_moduleò  s    z*TestGetClosureVars.test_builtins_as_moduleN)r/   r>   r?   r.  r/  r0  r<  r>  r@  rB  rD  rE  rF  r   r   r   r   r!    s   &r!  c               @   s`   e Zd Zddd„Zd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 )ÚTestGetcallargsFunctionsNc             C   s@   t |pi |d}td| d |ƒ}td| d |ƒ}|  ||¡ d S )N)r5  zfunc(%s)zinspect.getcallargs(func, %s))r‚   r-   rš   )r8   r5  Úcall_params_stringÚlocsZr1Zr2r   r   r   ÚassertEqualCallArgsû  s
    
z,TestGetcallargsFunctions.assertEqualCallArgsc          
   C   sÌ   t |pi |d}ytd| d |ƒ W n& tk
rJ } z|}W d d }~X Y nX |  d¡ ytd| d |ƒ W n& tk
r } z|}W d d }~X Y nX |  d¡ |  t|ƒt|ƒ¡ |  t|ƒt|ƒ¡ ~~d S )N)r5  zfunc(%s)zException not raisedzinspect.getcallargs(func, %s))r‚   r-   r  Úfailr°   r]   rš   rý   )r8   r5  Zcall_param_stringrI  rÇ   Zex1Zex2r   r   r   ÚassertEqualException  s    



z-TestGetcallargsFunctions.assertEqualExceptionc             C   s   d}t || ƒS )z+Create a function that returns its locals()zlambda %s: locals())r-   )r8   rá  rA  r   r   r   ÚmakeCallable  s    z%TestGetcallargsFunctions.makeCallablec             C   sæ   |   d¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d	¡ |  |d
¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )Nza, b=1Ú2z2, 3za=2zb=3, a=2z2, b=3z*(2,)z*[2]z*(2, 3)z*[2, 3]z	**{"a":2}zb=3, **{"a":2}z2, **{"b":3}z**{"b":3, "a":2}z*collections.UserList([2])z*collections.UserList([2, 3])z**collections.UserDict(a=2)z2, **collections.UserDict(b=3)z b=2, **collections.UserDict(a=3))rM  rJ  )r8   rÈ   r   r   r   Ú
test_plain  s&    
z#TestGetcallargsFunctions.test_plainc             C   sV   |   d¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )Nz
a, b=1, *crN  z2, 3z2, 3, 4z*(2,3,4)z	2, *[3,4]z 2, 3, *collections.UserList([4]))rM  rJ  )r8   rÈ   r   r   r   Útest_varargs1  s    
z%TestGetcallargsFunctions.test_varargsc             C   sz   |   d¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d	¡ |  |d
¡ d S )Nza, b=1, **cza=2z2, b=3, c=4zb=3, a=2, c=4zc=4, **{"a":2, "b":3}z2, c=4, **{"b":3}zb=2, **{"a":3, "c":4}z%**collections.UserDict(a=2, b=3, c=4)z#2, c=4, **collections.UserDict(b=3)z%b=2, **collections.UserDict(a=3, c=4))rM  rJ  )r8   rÈ   r   r   r   Ú
test_varkw:  s    
z#TestGetcallargsFunctions.test_varkwc             C   sV   |   d¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )Nz**crÖ   za=1za=1, b=2zc=3, **{"a": 1, "b": 2}z **collections.UserDict(a=1, b=2)z%c=3, **collections.UserDict(a=1, b=2))rM  rJ  )r8   rÈ   r   r   r   Útest_varkw_onlyF  s    
z(TestGetcallargsFunctions.test_varkw_onlyc             C   sœ   |   d¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d	¡ |   d
¡}|  |d¡ |  |d¡ |  |d¡ d S )Nza=3, *, c, d=2zc=3zc=3, a=3za=2, c=4z4, c=4rÖ   Ú3za=3zd=4z	*, c, d=2zc=3, d=4zd=4, c=3)rM  rJ  rL  )r8   rÈ   r   r   r   Útest_keyword_onlyP  s    

z*TestGetcallargsFunctions.test_keyword_onlyc             C   s´   |   d¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |   d	¡}|  |d¡ |  |d¡ |  |d
¡ |  |d¡ |  |d¡ |  |d¡ d S )Nza, b=2, *f, **gz2, 3, 7z	2, 3, x=8z2, 3, x=8, *[(4,[5,6]), 7]z2, x=8, *[3, (4,[5,6]), 7], y=9zx=8, *[2, 3, (4,[5,6])], y=9z@x=8, *collections.UserList([2, 3, (4,[5,6])]), **{"y":9, "z":10}zP2, x=8, *collections.UserList([3, (4,[5,6])]), **collections.UserDict(y=9, z=10)za, b=2, *f, x, y=99, **gz%2, x=8, *[3, (4,[5,6]), 7], y=9, z=10z"x=8, *[2, 3, (4,[5,6])], y=9, z=10zEx=8, *collections.UserList([2, 3, (4,[5,6])]), q=0, **{"y":9, "z":10}zU2, x=8, *collections.UserList([3, (4,[5,6])]), q=0, **collections.UserDict(y=9, z=10))rM  rJ  )r8   rÈ   r   r   r   Útest_multiple_features`  s    

z/TestGetcallargsFunctions.test_multiple_featuresc       	   	   C   s6  |   d¡}|   d¡}|   d¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ x”||fD ]ˆ}|  |d	¡ |  |d
¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ q”W |   d¡}|  |d¡ |  |d¡ |   d¡}|  |d¡ |  |d¡ dd„ }|  td¡ t |¡ W d Q R X dd„ }|  td¡ t |¡ W d Q R X |  td¡ tjdtjjd d! W d Q R X |  td"¡ tjd#d$d d! W d Q R X |  td%¡ tjd&d'd( W d Q R X d S ))NrÖ   za, bza, b=1ré  zx=1z1,x=1za=2zb=3z2, 3, 4z1, 2, 3, a=1z2, 3, 4, c=5zc=2z2, c=3z	2, 3, c=4z2, c=4, b=3u   **{u"Ï€Î¹": 4}z1, a=2z1, **{"a":2}z	1, 2, b=3z**cz1, 2z1, 2, a=1, b=2z	*, a, b=0c             S   s   d S )Nr   )r   r   r   r   Úf5§  rn   z0TestGetcallargsFunctions.test_errors.<locals>.f5zmissing 1 required keyword-onlyc             S   s   d S )Nr   )r   r~   r   r   r   r   Úf6®  s    z0TestGetcallargsFunctions.test_errors.<locals>.f6z'a', 'b' and 'c'z6variadic keyword parameters cannot have default valuesr   r   )ÚkindÚdefaultz%value 5 is not a valid Parameter.kindr   rŽ   zname must be a str, not a inté{   r®  )rX  )	rM  rL  ÚassertRaisesRegexr  r2   Úgetcallargsr¯  rÅ  ÚVAR_KEYWORD)	r8   Zf0Úf1Úf2rÈ   Úf3Úf4rV  rW  r   r   r   Útest_errorsx  s^    




z$TestGetcallargsFunctions.test_errors)N)N)r/   r>   r?   rJ  rL  rM  rO  rP  rQ  rR  rT  rU  rb  r   r   r   r   rG  ù  s   

	
rG  c                   s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )ÚTestGetcallargsMethodsc             C   s"   G dd„ dt ƒ}|| _|ƒ | _d S )Nc               @   s   e Zd ZdS )z)TestGetcallargsMethods.setUp.<locals>.FooN)r/   r>   r?   r   r   r   r   ÚFooÄ  s   rd  )r|   r“   Úinst)r8   rd  r   r   r   rÔ   Ã  s    zTestGetcallargsMethods.setUpc                s0   d|kst ‚tt| ƒj}|d| ƒ| j_| jjS )Nr8   zself, )ÚAssertionErrorrƒ  rc  rM  r“   ru  re  )r8   rá  Úmk)r„  r   r   rM  É  s    z#TestGetcallargsMethods.makeCallable)r/   r>   r?   rÔ   rM  rŠ  r   r   )r„  r   rc  Á  s   rc  c                   sB   e Zd Z‡ fdd„Zd
‡ fdd„	Zd‡ fdd„	Zddd	„Z‡  ZS )ÚTestGetcallargsUnboundMethodsc                s   t t| ƒ |¡ | jjS )N)rƒ  rh  rM  r“   ru  )r8   rá  )r„  r   r   rM  Ñ  s    z*TestGetcallargsUnboundMethods.makeCallableNc                s   t t| ƒj|  |||¡Ž S )N)rƒ  rh  rJ  Ú_getAssertEqualParams)r8   r5  rH  rI  )r„  r   r   rJ  Õ  s    
z1TestGetcallargsUnboundMethods.assertEqualCallArgsc                s   t t| ƒj|  |||¡Ž S )N)rƒ  rh  rL  ri  )r8   r5  rH  rI  )r„  r   r   rL  Ù  s    
z2TestGetcallargsUnboundMethods.assertEqualExceptionc             C   s,   d|kst ‚t|pi | jd}|d| |fS )Nre  )re  zinst,)rf  r‚   re  )r8   r5  rH  rI  r   r   r   ri  Ý  s    z3TestGetcallargsUnboundMethods._getAssertEqualParams)N)N)N)r/   r>   r?   rM  rJ  rL  ri  rŠ  r   r   )r„  r   rh  Ï  s   rh  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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 ).ÚTestGetattrStaticc          	   C   s€   G dd„ dt ƒ}|ƒ }|  t |d¡|j¡ |  t |dd ¡|j¡ |  t¡ t |d¡ W d Q R X |  t |dd¡d¡ d S )Nc               @   s   e Zd Zeƒ ZdS )z+TestGetattrStatic.test_basic.<locals>.ThingN)r/   r>   r?   r|   r†   r   r   r   r   ÚThingæ  s   rk  r†   r½   r¬   )r|   rš   r2   Úgetattr_staticr†   r  r  )r8   rk  Úthingr   r   r   Ú
test_basicå  s    zTestGetattrStatic.test_basicc             C   s@   G dd„ dt ƒ}G dd„ d|ƒ}|ƒ }|  t |d¡|j¡ d S )Nc               @   s   e Zd Zeƒ ZdS )z/TestGetattrStatic.test_inherited.<locals>.ThingN)r/   r>   r?   r|   r†   r   r   r   r   rk  ò  s   rk  c               @   s   e Zd ZdS )z4TestGetattrStatic.test_inherited.<locals>.OtherThingN)r/   r>   r?   r   r   r   r   Ú
OtherThingô  s   ro  r†   )r|   rš   r2   rl  r†   )r8   rk  ro  Z	somethingr   r   r   Útest_inheritedñ  s    z TestGetattrStatic.test_inheritedc             C   sH   G dd„ dt ƒ}|dƒ}|  t |d¡d¡ |`|  t |d¡d¡ d S )Nc               @   s   e Zd ZdZdd„ ZdS )z3TestGetattrStatic.test_instance_attr.<locals>.Thingr   c             S   s
   || _ d S )N)r†   )r8   r†   r   r   r   r£   ý  s    z<TestGetattrStatic.test_instance_attr.<locals>.Thing.__init__N)r/   r>   r?   r†   r£   r   r   r   r   rk  û  s   rk  r¬   r†   r   )r|   rš   r2   rl  r†   )r8   rk  rm  r   r   r   Útest_instance_attrú  s
    z$TestGetattrStatic.test_instance_attrc             C   s0   G dd„ dt ƒ}|ƒ }|  t |d¡|j¡ d S )Nc               @   s   e Zd Zedd„ ƒZdS )z.TestGetattrStatic.test_property.<locals>.Thingc             S   s   t dƒ‚d S )NzI'm pretending not to exist)r  )r8   r   r   r   r†     s    z0TestGetattrStatic.test_property.<locals>.Thing.xN)r/   r>   r?   r  r†   r   r   r   r   rk    s   rk  r†   )r|   rš   r2   rl  r†   )r8   rk  rm  r   r   r   Útest_property  s    zTestGetattrStatic.test_propertyc                sH   G dd„ dt ƒ}|ƒ ‰ G ‡ fdd„dt ƒ}|ƒ }|  t |d¡ˆ ¡ d S )Nc               @   s   e Zd Zdd„ ZdS )zKTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.descriptorc              W   s   t dƒ‚d S )NzI'm pretending not to exist)r  )Ú_r   r   r   rŒ    s    zSTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.descriptor.__get__N)r/   r>   r?   rŒ  r   r   r   r   Ú
descriptor  s   rt  c                   s   e Zd Z” ZdS )zFTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.ThingN)r/   r>   r?   r†   r   )Údescr   r   rk    s   rk  r†   )r|   rš   r2   rl  )r8   rt  rk  rm  r   )ru  r   Ú%test_descriptor_raises_AttributeError  s
    z7TestGetattrStatic.test_descriptor_raises_AttributeErrorc             C   s*   G dd„ dt ƒ}|  t |d¡|j¡ d S )Nc               @   s   e Zd Zeƒ ZdS )z4TestGetattrStatic.test_classAttribute.<locals>.ThingN)r/   r>   r?   r|   r†   r   r   r   r   rk    s   rk  r†   )r|   rš   r2   rl  r†   )r8   rk  r   r   r   Útest_classAttribute  s    z%TestGetattrStatic.test_classAttributec             C   s.   G dd„ dt ƒ}|  t |d¡|jd ¡ d S )Nc               @   s    e Zd Zejdd„ ƒZeƒ ZdS )z;TestGetattrStatic.test_classVirtualAttribute.<locals>.Thingc             S   s   | j S )N)Ú_x)r8   r   r   r   r†     s    z=TestGetattrStatic.test_classVirtualAttribute.<locals>.Thing.xN)r/   r>   r?   r[   rû  r†   r|   rx  r   r   r   r   rk    s   rk  r†   )r|   rš   r2   rl  r  )r8   rk  r   r   r   Útest_classVirtualAttribute  s    z,TestGetattrStatic.test_classVirtualAttributec             C   s:   G dd„ dt ƒ}G dd„ d|ƒ}|  t |d¡|j¡ d S )Nc               @   s   e Zd Zeƒ ZdS )z>TestGetattrStatic.test_inherited_classattribute.<locals>.ThingN)r/   r>   r?   r|   r†   r   r   r   r   rk  &  s   rk  c               @   s   e Zd ZdS )zCTestGetattrStatic.test_inherited_classattribute.<locals>.OtherThingN)r/   r>   r?   r   r   r   r   ro  (  s   ro  r†   )r|   rš   r2   rl  r†   )r8   rk  ro  r   r   r   Útest_inherited_classattribute%  s    z/TestGetattrStatic.test_inherited_classattributec             C   s^   G dd„ dt ƒ}|ƒ }|  t |d¡|j¡ |  t |d¡d¡ |`|  t |d¡|j¡ d S )Nc               @   s   e Zd ZdZdgZdd„ ZdS )z+TestGetattrStatic.test_slots.<locals>.Thingr   r†   c             S   s
   d| _ d S )Nr   )r†   )r8   r   r   r   r£   1  s    z4TestGetattrStatic.test_slots.<locals>.Thing.__init__N)r/   r>   r?   r½   r   r£   r   r   r   r   rk  .  s   rk  r†   r½   r   )r|   rš   r2   rl  r†   )r8   rk  rm  r   r   r   Ú
test_slots-  s    zTestGetattrStatic.test_slotsc             C   s˜   G dd„ dt ƒ}G dd„ dt|d}|  t |d¡d¡ G dd	„ d	|ƒ}G d
d„ dt|d}|  t |d¡d¡ G dd„ d|ƒ}|  t |d¡d¡ d S )Nc               @   s   e Zd ZdZdS )z.TestGetattrStatic.test_metaclass.<locals>.metar   N)r/   r>   r?   rx   r   r   r   r   Úmeta;  s   r|  c               @   s   e Zd ZdS )z/TestGetattrStatic.test_metaclass.<locals>.ThingN)r/   r>   r?   r   r   r   r   rk  =  s   rk  )rŒ   rx   r   c               @   s   e Zd ZdS )z-TestGetattrStatic.test_metaclass.<locals>.subN)r/   r>   r?   r   r   r   r   ÚsubA  s   r}  c               @   s   e Zd ZdZdS )z4TestGetattrStatic.test_metaclass.<locals>.OtherThingr¬   N)r/   r>   r?   r†   r   r   r   r   ro  C  s   ro  c               @   s   e Zd ZdS )z9TestGetattrStatic.test_metaclass.<locals>.OtherOtherThingN)r/   r>   r?   r   r   r   r   ÚOtherOtherThingG  s   r~  r†   r¬   )r]   r|   rš   r2   rl  )r8   r|  rk  r}  ro  r~  r   r   r   Útest_metaclass:  s    z TestGetattrStatic.test_metaclassc             C   s.   |   t ddd ¡d ¡ |  t dd¡d ¡ d S )Nr   r   Úlower)rš   r2   rl  ÚassertNotEqual)r8   r   r   r   Útest_no_dict_no_slotsL  s    z'TestGetattrStatic.test_no_dict_no_slotsc          	   C   s2   t tƒ }|  t |d¡t|ƒj¡ W d Q R X d S )Nr!  )rÎ   r´   rš   r2   rl  r]   r!  )r8   Úhandler   r   r   Ú%test_no_dict_no_slots_instance_memberP  s    
z7TestGetattrStatic.test_no_dict_no_slots_instance_memberc             C   s<   G dd„ dt ƒ}G dd„ d|ƒ}|  t |ƒ d¡|j¡ d S )Nc               @   s   e Zd ZdgZdd„ ZdS )z5TestGetattrStatic.test_inherited_slots.<locals>.Thingr†   c             S   s
   d| _ d S )Nr   )r†   )r8   r   r   r   r£   Y  s    z>TestGetattrStatic.test_inherited_slots.<locals>.Thing.__init__N)r/   r>   r?   r   r£   r   r   r   r   rk  W  s   rk  c               @   s   e Zd ZdS )z:TestGetattrStatic.test_inherited_slots.<locals>.OtherThingN)r/   r>   r?   r   r   r   r   ro  \  s   ro  r†   )r|   rš   r2   rl  r†   )r8   rk  ro  r   r   r   Útest_inherited_slotsU  s    z&TestGetattrStatic.test_inherited_slotsc                sp   G dd„ dt ƒ‰ G ‡ fdd„dt ƒ}|ƒ }d|jd< |  t |d¡d¡ dd„ ˆ _|  t |d¡|jd ¡ d S )	Nc               @   s   e Zd Zdd„ ZdS )z5TestGetattrStatic.test_descriptor.<locals>.descriptorc             S   s   dS )Nr¬   r   )r8   ÚinstanceÚownerr   r   r   rŒ  d  s    z=TestGetattrStatic.test_descriptor.<locals>.descriptor.__get__N)r/   r>   r?   rŒ  r   r   r   r   rt  c  s   rt  c                   s   e Zd Z” ƒ ZdS )z.TestGetattrStatic.test_descriptor.<locals>.FooN)r/   r>   r?   rÆ   r   )rt  r   r   rd  f  s   rd  r   rÆ   c             S   s   d S )Nr   )ræ  r$   Úvr   r   r   rr   q  rn   z3TestGetattrStatic.test_descriptor.<locals>.<lambda>)r|   r  rš   r2   rl  rŽ  )r8   rd  r   r   )rt  r   Útest_descriptorb  s    

z!TestGetattrStatic.test_descriptorc                sV   G dd„ dt ƒ‰ G ‡ fdd„dtƒ}G dd„ dt |d}|  t |d¡|jd ¡ d S )	Nc               @   s   e Zd Zdd„ ZdS )zDTestGetattrStatic.test_metaclass_with_descriptor.<locals>.descriptorc             S   s   dS )Nr¬   r   )r8   r†  r‡  r   r   r   rŒ  w  s    zLTestGetattrStatic.test_metaclass_with_descriptor.<locals>.descriptor.__get__N)r/   r>   r?   rŒ  r   r   r   r   rt  v  s   rt  c                   s   e Zd Z” ƒ ZdS )z>TestGetattrStatic.test_metaclass_with_descriptor.<locals>.metaN)r/   r>   r?   rÆ   r   )rt  r   r   r|  y  s   r|  c               @   s   e Zd ZdS )z?TestGetattrStatic.test_metaclass_with_descriptor.<locals>.ThingN)r/   r>   r?   r   r   r   r   rk  {  s   rk  )rŒ   rÆ   )r|   r]   rš   r2   rl  r  )r8   r|  rk  r   )rt  r   Útest_metaclass_with_descriptoru  s    z0TestGetattrStatic.test_metaclass_with_descriptorc             C   s^   G dd„ dt ƒ}G dd„ d|ƒ}|ƒ }|  t |d¡d¡ |  |j¡ |  t |d¡d¡ d S )Nc               @   s   e Zd ZdZdS )z6TestGetattrStatic.test_class_as_property.<locals>.Baser¬   N)r/   r>   r?   r   r   r   r   r   ÚBase  s   r‹  c               @   s   e Zd ZdZedd„ ƒZdS )z;TestGetattrStatic.test_class_as_property.<locals>.SomethingFc             S   s
   d| _ tS )NT)Úexecutedr|   )r8   r   r   r   r„  †  s    zETestGetattrStatic.test_class_as_property.<locals>.Something.__class__N)r/   r>   r?   rŒ  r  r„  r   r   r   r   Ú	Something„  s   r  r   r¬   )r|   rš   r2   rl  r7   rŒ  )r8   r‹  r  r†  r   r   r   Útest_class_as_property€  s    z(TestGetattrStatic.test_class_as_propertyc             C   sb   G dd„ dt ƒ}G dd„ dtƒ}G dd„ d||d}|  t |ƒ d¡d	¡ |  t |d¡d	¡ d S )
Nc               @   s   e Zd Zedd„ ƒZdS )z4TestGetattrStatic.test_mro_as_property.<locals>.Metac             S   s   t fS )N)r|   )r8   r   r   r   Ú__mro__’  s    z<TestGetattrStatic.test_mro_as_property.<locals>.Meta.__mro__N)r/   r>   r?   r  r  r   r   r   r   rú  ‘  s   rú  c               @   s   e Zd ZdZdS )z4TestGetattrStatic.test_mro_as_property.<locals>.Baser¬   N)r/   r>   r?   r   r   r   r   r   r‹  –  s   r‹  c               @   s   e Zd ZdS )z9TestGetattrStatic.test_mro_as_property.<locals>.SomethingN)r/   r>   r?   r   r   r   r   r  ™  s   r  )rŒ   r   r¬   )r]   r|   rš   r2   rl  )r8   rú  r‹  r  r   r   r   Útest_mro_as_property  s
    z&TestGetattrStatic.test_mro_as_propertyc                sN   | ‰ dˆ _ G ‡ fdd„dtƒ}|ƒ }d|_|  t |d¡d¡ |  ˆ j ¡ d S )NFc                   s    e Zd ZdZe‡ fdd„ƒZdS )z4TestGetattrStatic.test_dict_as_property.<locals>.Foor¬   c                s
   dˆ _ i S )NT)Úcalled)r8   )rÄ  r   r   r  ¥  s    z=TestGetattrStatic.test_dict_as_property.<locals>.Foo.__dict__N)r/   r>   r?   r   r  r  r   )rÄ  r   r   rd  £  s   rd  r®  r   r¬   )r‘  r‚   r   rš   r2   rl  r7   )r8   rd  r   r   )rÄ  r   Útest_dict_as_propertyŸ  s    z'TestGetattrStatic.test_dict_as_propertyc                s`   | ‰ dˆ _ G ‡ fdd„dtƒ}G dd„ dtƒ}|ƒ }|ƒ |_|  t |d¡d¡ |  ˆ j ¡ d S )NFc                   s    e Zd Zd‡ ‡fdd„	Z‡  ZS )z9TestGetattrStatic.test_custom_object_dict.<locals>.CustomNc                s   dˆ_ tƒ  ||¡ d S )NT)r‘  rƒ  Úget)r8   ÚkeyrY  )r„  rÄ  r   r   r“  ´  s    z=TestGetattrStatic.test_custom_object_dict.<locals>.Custom.get)N)r/   r>   r?   r“  rŠ  r   )rÄ  )r„  r   ÚCustom³  s   r•  c               @   s   e Zd ZdZdS )z6TestGetattrStatic.test_custom_object_dict.<locals>.Foor¬   N)r/   r>   r?   r   r   r   r   r   rd  ¸  s   rd  r   r¬   )r‘  r‚   r|   r  rš   r2   rl  r7   )r8   r•  rd  r   r   )rÄ  r   Útest_custom_object_dict¯  s    z)TestGetattrStatic.test_custom_object_dictc             C   sL   G dd„ dt ƒ}G dd„ d|d}|ƒ }|  t |d¡d¡ |  |j¡ d S )Nc               @   s   e Zd Zedd„ ƒZdS )z?TestGetattrStatic.test_metaclass_dict_as_property.<locals>.Metac             S   s
   d| _ d S )NT)rŒ  )r8   r   r   r   r  Á  s    zHTestGetattrStatic.test_metaclass_dict_as_property.<locals>.Meta.__dict__N)r/   r>   r?   r  r  r   r   r   r   rú  À  s   rú  c               @   s   e Zd ZdZdd„ ZdS )z@TestGetattrStatic.test_metaclass_dict_as_property.<locals>.ThingFc             S   s
   d| _ d S )Nr   )rM   )r8   r   r   r   r£   È  s    zITestGetattrStatic.test_metaclass_dict_as_property.<locals>.Thing.__init__N)r/   r>   r?   rŒ  r£   r   r   r   r   rk  Å  s   rk  )rŒ   rM   r   )r]   rš   r2   rl  r7   rŒ  )r8   rú  rk  r†  r   r   r   Útest_metaclass_dict_as_property¿  s
    z1TestGetattrStatic.test_metaclass_dict_as_propertyc             C   s    t ƒ }|  t td|¡|¡ d S )NÚversion)r|   ÚassertIsNotr2   rl  rX   )r8   Úsentinelr   r   r   Útest_moduleÏ  s    zTestGetattrStatic.test_modulec          	   C   sh   G dd„ dt ƒ}G dd„ dt |d}G dd„ d|d}|  t¡ t |d¡ W d Q R X |  |j¡ d S )	Nc               @   s   e Zd Zedd„ ƒZdS )zWTestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.MetaMetac             S   s   d| _ tddS )NTr   )rM   )rŒ  r‚   )r8   r   r   r   r  Ö  s    z`TestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.MetaMeta.__dict__N)r/   r>   r?   r  r  r   r   r   r   ÚMetaMetaÕ  s   rœ  c               @   s   e Zd ZdZdS )zSTestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.MetaFN)r/   r>   r?   rŒ  r   r   r   r   rú  Û  s   rú  )rŒ   c               @   s   e Zd ZdS )zTTestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.ThingN)r/   r>   r?   r   r   r   r   rk  Þ  s   rk  rM   )r]   r  r  r2   rl  r7   rŒ  )r8   rœ  rú  rk  r   r   r   Ú3test_metaclass_with_metaclass_with_dict_as_propertyÔ  s    zETestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_propertyN)r/   r>   r?   rn  rp  rq  rr  rv  rw  ry  rz  r{  r  r‚  r„  r…  r‰  rŠ  rŽ  r  r’  r–  r—  r›  r  r   r   r   r   rj  ã  s,   	

	rj  c               @   sd   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 )ÚTestGetGeneratorStatec             C   s   dd„ }|ƒ | _ d S )Nc              s   s   xt dƒD ]
} | V  q
W d S )NrŽ   )r   )Únumberr   r   r   Únumber_generatorè  s    z5TestGetGeneratorState.setUp.<locals>.number_generator)Ú	generator)r8   r   r   r   r   rÔ   ç  s    zTestGetGeneratorState.setUpc             C   s   t  | j¡S )N)r2   Úgetgeneratorstater¡  )r8   r   r   r   Ú_generatorstateí  s    z%TestGetGeneratorState._generatorstatec             C   s   |   |  ¡ tj¡ d S )N)rš   r£  r2   ÚGEN_CREATED)r8   r   r   r   Útest_createdð  s    z"TestGetGeneratorState.test_createdc             C   s    t | jƒ |  |  ¡ tj¡ d S )N)Únextr¡  rš   r£  r2   ÚGEN_SUSPENDED)r8   r   r   r   Útest_suspendedó  s    
z$TestGetGeneratorState.test_suspendedc             C   s&   x| j D ]}qW |  |  ¡ tj¡ d S )N)r¡  rš   r£  r2   Ú
GEN_CLOSED)r8   r$   r   r   r   Útest_closed_after_exhaustion÷  s    z2TestGetGeneratorState.test_closed_after_exhaustionc          	   C   s8   |   t¡ | j t¡ W d Q R X |  |  ¡ tj¡ d S )N)r  r  r¡  r)   rš   r£  r2   r©  )r8   r   r   r   Ú%test_closed_after_immediate_exceptionü  s    z;TestGetGeneratorState.test_closed_after_immediate_exceptionc                s,   ‡ fdd„}|ƒ ˆ _ tˆ j ƒ tˆ j ƒ d S )Nc              3   s@   x:t dƒD ].} ˆ  ˆ  ¡ tj¡ | V  ˆ  ˆ  ¡ tj¡ q
W d S )NrŽ   )r   rš   r£  r2   ÚGEN_RUNNING)rŸ  )r8   r   r   Úrunning_check_generator  s    zCTestGetGeneratorState.test_running.<locals>.running_check_generator)r¡  r¦  )r8   r­  r   )r8   r   Útest_running  s    
z"TestGetGeneratorState.test_runningc             C   sD   d  ¡ }x6|D ].}tt|ƒ}|  |t|ƒ¡ |  |t|ƒ¡ qW d S )Nz0GEN_CREATED GEN_RUNNING GEN_SUSPENDED GEN_CLOSED)r×   rö  r2   r„   Úreprrý   )r8   Únamesr!  Ústater   r   r   Útest_easy_debugging  s
    

z)TestGetGeneratorState.test_easy_debuggingc          	   C   sî   ddd„}|dddgƒ}|   t |¡d dddgdœ¡ t|ƒ |   t |¡d dddgdddœ¡ t|ƒ |   t |¡d dddgdddœ¡ t|ƒ |   t |¡d dddgddd	d
œ¡ yt|ƒ W n tk
rÖ   Y nX |   t |¡i ¡ d S )Nc             s   s(   d}x| D ]}|dkrd}|V  q
W d S )N)r   r   r¬   r¬   r+  r   )Úlstr   r~   rˆ  r   r   r   r   Úeach  s
    
z;TestGetGeneratorState.test_getgeneratorlocals.<locals>.eachr   r   r¬   )r   r³  )r   r   r¬   )r   r³  rˆ  r~   r+  )r   r³  rˆ  r~   r   )N)rš   r2   Úgetgeneratorlocalsr¦  ÚStopIteration)r8   r´  Znumbersr   r   r   Útest_getgeneratorlocals  s*    


z-TestGetGeneratorState.test_getgeneratorlocalsc             C   sX   dd„ }|ƒ }|   t |¡i ¡ yt|ƒ W n tk
r@   Y nX |   t |¡i ¡ d S )Nc               s   s
   dV  d S )Nr   r   r   r   r   r   Ú	yield_one7  s    zFTestGetGeneratorState.test_getgeneratorlocals_empty.<locals>.yield_one)rš   r2   rµ  r¦  r¶  )r8   r¸  r  r   r   r   Útest_getgeneratorlocals_empty6  s    z3TestGetGeneratorState.test_getgeneratorlocals_emptyc             C   sH   |   ttjd¡ |   ttjdd„ ¡ |   ttjt¡ |   ttjd¡ d S )Nr   c             S   s   dS )NTr   )r†   r   r   r   rr   C  rn   zETestGetGeneratorState.test_getgeneratorlocals_error.<locals>.<lambda>)r   r¬   )r  r  r2   rµ  r1   )r8   r   r   r   Útest_getgeneratorlocals_errorA  s    z3TestGetGeneratorState.test_getgeneratorlocals_errorN)r/   r>   r?   rÔ   r£  r¥  r¨  rª  r«  r®  r²  r·  r¹  rº  r   r   r   r   rž  å  s   rž  c               @   sT   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S )ÚTestGetCoroutineStatec                s&   t jdd„ ƒ‰ ‡ fdd„}|ƒ | _d S )Nc              s   s   xt dƒD ]
} | V  q
W d S )NrŽ   )r   )rŸ  r   r   r   Únumber_coroutineK  s    z5TestGetCoroutineState.setUp.<locals>.number_coroutinec               “   s   ˆ ƒ I d H  d S )Nr   r   )r¼  r   r   Ú	coroutineO  s    z.TestGetCoroutineState.setUp.<locals>.coroutine)r[   r½  )r8   r½  r   )r¼  r   rÔ   J  s    zTestGetCoroutineState.setUpc             C   s   | j  ¡  d S )N)r½  ri   )r8   r   r   r   r‡  S  s    zTestGetCoroutineState.tearDownc             C   s   t  | j¡S )N)r2   Úgetcoroutinestater½  )r8   r   r   r   Ú_coroutinestateV  s    z%TestGetCoroutineState._coroutinestatec             C   s   |   |  ¡ tj¡ d S )N)rš   r¿  r2   ÚCORO_CREATED)r8   r   r   r   r¥  Y  s    z"TestGetCoroutineState.test_createdc             C   s"   | j  d ¡ |  |  ¡ tj¡ d S )N)r½  Úsendrš   r¿  r2   ÚCORO_SUSPENDED)r8   r   r   r   r¨  \  s    z$TestGetCoroutineState.test_suspendedc             C   sD   x,y| j  d ¡ W q tk
r(   P Y qX qW |  |  ¡ tj¡ d S )N)r½  rÁ  r¶  rš   r¿  r2   ÚCORO_CLOSED)r8   r   r   r   rª  `  s    z2TestGetCoroutineState.test_closed_after_exhaustionc          	   C   s8   |   t¡ | j t¡ W d Q R X |  |  ¡ tj¡ d S )N)r  r  r½  r)   rš   r¿  r2   rÃ  )r8   r   r   r   r«  i  s    z;TestGetCoroutineState.test_closed_after_immediate_exceptionc             C   sD   d  ¡ }x6|D ].}tt|ƒ}|  |t|ƒ¡ |  |t|ƒ¡ qW d S )Nz4CORO_CREATED CORO_RUNNING CORO_SUSPENDED CORO_CLOSED)r×   rö  r2   r„   r¯  rý   )r8   r°  r!  r±  r   r   r   r²  n  s
    

z)TestGetCoroutineState.test_easy_debuggingc                sh   t jdd„ ƒ‰ ˆ ƒ ‰ d‡ fdd„	}|ƒ }|  t |¡d ˆ dœ¡ | d ¡ |  t |¡d ˆ ddœ¡ d S )	Nc               s   s
   d V  d S )Nr   r   r   r   r   Úgencorow  s    z>TestGetCoroutineState.test_getcoroutinelocals.<locals>.gencoroc             “   s   d}ˆ I d H  d S )NrM   r   )r   r~   )rÄ  r   r   r5  |  s    z;TestGetCoroutineState.test_getcoroutinelocals.<locals>.func)r   rÄ  rM   )r   rÄ  r~   )N)r[   r½  rš   r2   ÚgetcoroutinelocalsrÁ  )r8   r5  rk   r   )rÄ  r   Útest_getcoroutinelocalsv  s    
z-TestGetCoroutineState.test_getcoroutinelocalsN)r/   r>   r?   rÔ   r‡  r¿  r¥  r¨  rª  r«  r²  rÆ  r   r   r   r   r»  H  s   		r»  c               @   s   e Zd ZdS )ÚMySignatureN)r/   r>   r?   r   r   r   r   rÇ  ˆ  s   rÇ  c               @   s   e Zd ZdS )ÚMyParameterN)r/   r>   r?   r   r   r   r   rÈ    s   rÈ  c               @   s€  e Zd Ze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e ed¡dd„ ƒƒZee ed¡dd„ ƒƒZe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.d/„ Zd0d1„ Ze ed¡d2d3„ ƒZ e ed¡d4d5„ ƒZ!d6d7„ Z"d8d9„ Z#d:d;„ Z$d<d=„ Z%d>d?„ Z&d@dA„ Z'dBdC„ Z(dDdE„ Z)dFdG„ Z*e ed¡dHdI„ ƒZ+dJdK„ Z,dLS )MÚTestSignatureObjectc             K   s<   t j| f|Ž}tdd„ |j ¡ D ƒƒ|j|jkr4dn|jfS )Nc             s   sJ   | ]B}|j |j|jkrd n|j|j|jkr.d n|jt|jƒ ¡ fV  qdS ).N)r!  rY  ÚemptyÚ
annotationrý   rX  r€  )rã   Úparamr   r   r   ú	<genexpr>˜  s   z0TestSignatureObject.signature.<locals>.<genexpr>.)r2   rá  Útupler#   ÚvaluesÚreturn_annotationrÊ  )r5  ÚkwÚsigr   r   r   rá  •  s
    zTestSignatureObject.signaturec          	   C   s  t j}t j}|  t|ƒ ƒd¡ ddd„}t  |¡}|jd j|jd}|jd j|jd}|jd	 }|jd
 }|jd }	|jd }
|jd }||||	|
|fƒ |  	t
d¡ ||||	|
|fƒ W d Q R X |  	t
d¡ |||	||
|fƒ W d Q R X |  	t
d¡ ||	|||
|fƒ W d Q R X |  	t
d¡ ||||	||
fƒ W d Q R X |jdd}|  	t
d¡ ||||	||
fƒ W d Q R X |  	t
d¡ |||fƒ W d Q R X |  	t
d¡ ||||fƒ W d Q R X |  	t
d¡ |||fƒ W d Q R X |  t|ƒ d¡¡ |  dt|ƒk¡ d S )Nz()r   éd   c            _   s   d S )Nr   )ÚpoÚpkÚpodÚpkdÚkor   r¦   r   r   r   rÄ  §  s    z7TestSignatureObject.test_signature_object.<locals>.testrÔ  )rX  rÖ  rÕ  r×  r   rØ  r¦   zwrong parameter order)r!  zduplicate parameter namezfollows default argumentz
<Signaturez(po, pk)r   rÓ  )r2   rÇ  rÅ  rš   rý   rá  r#   ÚreplacerÆ  r[  r¯  r.   r¯  Ú
startswith)r8   ÚSÚPrÄ  rÒ  rÔ  rÖ  rÕ  r×  r   rØ  r¦   Zkwargs2r   r   r   Útest_signature_object¡  s@    






z)TestSignatureObject.test_signature_objectc       	   
   C   sb  i dœdddidœdd„}t j|dd}t |¡}xNttjd ƒD ]<}| j|d	d
$ t t 	||¡¡}|  
||¡ W d Q R X qBW t |¡}tdtjjd}tj|j|d}tƒ j| ¡ |jd}|  t|tƒ¡ |  t|jd tƒ¡ xtttjd ƒD ]b}| j|dd
J t t 	||¡¡}|  
||¡ |  t|tƒ¡ |  t|jd tƒ¡ W d Q R X qøW d S )N)r   r   r   r¸  )r   rÊ  c            [   s   d S )Nr   )r   r~   r   rÑ  r   r   r   r   Ñ  rn   z=TestSignatureObject.test_signature_object_pickle.<locals>.foo)r   F)Ú
pickle_verÚsubclassr   )r!  rX  )r#   rÐ  T)r»  rÂ  r2   rá  r   ÚpickleÚHIGHEST_PROTOCOLÚsubTestÚloadsÚdumpsrš   rÈ  rÅ  rÆ  ÚcollectionsÚOrderedDictr#   rÇ  rÙ  rÏ  rÐ  r.   r÷  )	r8   r   Zfoo_partialrÒ  ÚverZsig_pickledZmyparamZmyparamsZmysigr   r   r   Útest_signature_object_pickleÐ  s*    


z0TestSignatureObject.test_signature_object_picklec          	   C   sR   dd„ }t  |¡}|  t¡ d|_W d Q R X |  t¡ d |jd< W d Q R X d S )Nc             S   s   d S )Nr   )r   r   r   r   rÄ  í  s    z=TestSignatureObject.test_signature_immutability.<locals>.testr   r   )r2   rá  r  r  r   r  r#   )r8   rÄ  rÒ  r   r   r   Útest_signature_immutabilityì  s    
z/TestSignatureObject.test_signature_immutabilityc             C   s   dd„ }|   |  |¡d¡ d S )Nc               S   s   d S )Nr   r   r   r   r   rÄ  ø  s    z9TestSignatureObject.test_signature_on_noarg.<locals>.test)r   .)rš   rá  )r8   rÄ  r   r   r   Útest_signature_on_noarg÷  s    z+TestSignatureObject.test_signature_on_noargc             C   s&   dddœdd„}|   |  |¡d¡ d S )Nr   rZ  )r~   rÊ  c             S   s   d S )Nr   )r   r~   r   r   r   rÄ  ý  s    z9TestSignatureObject.test_signature_on_wargs.<locals>.test)))r   ..Úpositional_or_keyword)r~   .r   rë  rZ  )rš   rá  )r8   rÄ  r   r   r   Útest_signature_on_wargsü  s    z+TestSignatureObject.test_signature_on_wargsc             C   s@   t ttdœdd„}|  |  |¡ddt dfddtdfftf¡ d S )N)r   r~   rÊ  c             S   s   d S )Nr   )r   r~   r   r   r   rÄ    s    z;TestSignatureObject.test_signature_on_wkwonly.<locals>.testr   .Úkeyword_onlyr~   )Úfloatrý   r‘   rš   rá  )r8   rÄ  r   r   r   Útest_signature_on_wkwonly  s
    
z-TestSignatureObject.test_signature_on_wkwonlyc             C   sJ   dddœdddt dœdd	„}|  |  |¡d
ddddddt dffdf¡ d S )Nr:  rZ  )r¸  r   r   Úbaz)r~   r   rM   r¦   c            _   s   d S )Nr   )r   r~   rM   r¸  r   r¦   r   r   r   rÄ    s    z@TestSignatureObject.test_signature_on_complex_args.<locals>.test)r   ..rë  )r~   r:  r   rë  )r   .r   Úvar_positional)rM   .rð  rí  )r¸  rZ  .rí  r¦   .Úvar_keyword)r:  )r‘   rš   rá  )r8   rÄ  r   r   r   Útest_signature_on_complex_args  s    z2TestSignatureObject.test_signature_on_complex_argsc                sœ   dd„ ‰dd„ ‰ G ‡ ‡fdd„dƒ}|   |  ˆ¡d¡ |   |  ˆ ¡d¡ |   |  |j¡d¡ |   |  |j¡d¡ |   |  |j¡d¡ |   |  |j¡d¡ d S )	Nc              W   s   d S )Nr   )r   r   r   r   Útest_args_only  s    zGTestSignatureObject.test_signature_without_self.<locals>.test_args_onlyc              _   s   d S )Nr   )r   r¦   r   r   r   Útest_args_kwargs_only  s    zNTestSignatureObject.test_signature_without_self.<locals>.test_args_kwargs_onlyc                   sT   e Zd Zedd„ ƒZedd„ ƒZe ed¡Z	e ”d¡Z
e ed¡Ze ” d¡ZdS )z:TestSignatureObject.test_signature_without_self.<locals>.Ac              W   s   d S )Nr   )r   r   r   r   Útest_classmethod   s    zKTestSignatureObject.test_signature_without_self.<locals>.A.test_classmethodc              W   s   d S )Nr   )r   r   r   r   Útest_staticmethod$  s    zLTestSignatureObject.test_signature_without_self.<locals>.A.test_staticmethodr   N)r/   r>   r?   rë  rö  rê  r÷  r»  r½  r^  r_  r`  ra  r   )rõ  rô  r   r   r”    s   r”  )))r   ..rñ  .)))r   ..rñ  )r¦   ..rò  .)rš   rá  r^  r_  r`  ra  )r8   r”  r   )rõ  rô  r   Útest_signature_without_self  s    z/TestSignatureObject.test_signature_without_selfz6Signature information for builtins requires docstringsc          	      s¤  dd l }‡ fdd„}‡ fdd„}||jƒ‰‡fdd„}ˆ  |dƒd	¡ ˆ  |d
ƒd¡ ˆ  |dƒd¡ ˆ  |dƒd¡ ˆ  |dƒd ¡ ˆ  |dƒd¡ ˆ  |dƒd¡ ˆ  |dƒd¡ ˆ  |dƒtj¡ ˆ  dˆj¡ |tƒ |tj	j
ƒ t 	t ¡ ¡}||j
ƒ |tjƒ |djƒ |tjƒ |i jƒ |tjƒ |tjƒ |djƒ |tjƒ ˆ  td¡ G dd„ dƒ}||ƒ ƒ W d Q R X |tjƒ |tjƒ ||jƒ d S )Nr   c                s<   t  | ¡}ˆ  t|t jƒ¡ ˆ  t|j ¡ ƒd j	d¡ |S )zAUse this to test unbound methods (things that should have a self)r   r8   )
r2   rá  r.   r÷  rÇ  rš   r{   r#   rÏ  r!  )r   rá  )r8   r   r   Útest_unbound_methodA  s    
zKTestSignatureObject.test_signature_on_builtins.<locals>.test_unbound_methodc                sB   t  | ¡}ˆ  t|t jƒ¡ |jr>ˆ  t|j ¡ ƒd j	d¡ |S )zRUse this to test bound methods or normal callables (things that don't expect self)r   r8   )
r2   rá  r.   r÷  rÇ  r#   r  r{   rÏ  r!  )r   rá  )r8   r   r   Útest_callableH  s
    
zETestSignatureObject.test_signature_on_builtins.<locals>.test_callablec                s   ˆ j |  jS )N)r#   rY  )r!  )rá  r   r   r%   Q  rn   z9TestSignatureObject.test_signature_on_builtins.<locals>.præ  rØ  r~   s   bytesrÆ   g…ëQ¸	@r$   é#   Únr  TrÈ   FÚlocalr¬   rX   r:   r   zno signature foundc               @   s   e Zd ZeZdS )zDTestSignatureObject.test_signature_on_builtins.<locals>.ThisWorksNowN)r/   r>   r?   r]   rº  r   r   r   r   ÚThisWorksNowy  s   rþ  )rÙ  rÚ  rš   rX   Úmaxsizer…   r#   r|   rÑ  rÒ  rÓ  rÔ  ÚStringIOrý   Ú	maketransr‚   Úfromkeysr]   rº  r‘   rò  Úminr[  r¯  Ú__delitem__r  Ú
__delete__Z#docstring_with_signature_but_no_doc)r8   rÙ  rù  rú  r%   rÆ   rþ  r   )r8   rá  r   Útest_signature_on_builtins;  sB    











z.TestSignatureObject.test_signature_on_builtinsc             C   sd   dd l }|j}dd„ }||ƒ}|  t |¡t |¡¡ tdœdd„}|  tj|ddt |¡¡ d S )	Nr   c                s    t  ˆ ¡tdœ‡ fdd„ƒ}|S )N)rÊ  c                 s
   ˆ | |ŽS )Nr   )r   r¦   )r5  r   r   ÚwrapperŒ  s    z\TestSignatureObject.test_signature_on_decorated_builtins.<locals>.decorator.<locals>.wrapper)r»  r¼  r‘   )r5  r  r   )r5  r   Ú	decorator‹  s    zKTestSignatureObject.test_signature_on_decorated_builtins.<locals>.decorator)rÊ  c              _   s   d S )Nr   )r   r¦   r   r   r   Úwrapper_like–  rn   zNTestSignatureObject.test_signature_on_decorated_builtins.<locals>.wrapper_likeF)Úfollow_wrapped)rÙ  rÚ  rš   r2   rá  r‘   )r8   rÙ  r5  r  Zdecorated_funcr	  r   r   r   Ú$test_signature_on_decorated_builtins„  s    
z8TestSignatureObject.test_signature_on_decorated_builtinsc          	   C   sR   dd l }|  td¡ t |j¡ W d Q R X |  td¡ t t¡ W d Q R X d S )Nr   zno signature found for builtin)rÙ  r[  r¯  r2   rá  rÝ  rý   )r8   rÙ  r   r   r   Ú'test_signature_on_builtins_no_signature›  s    z;TestSignatureObject.test_signature_on_builtins_no_signaturec          	   C   s&   |   td¡ t d¡ W d Q R X d S )Nzis not a callable objectr   )r[  r  r2   rá  )r8   r   r   r   Útest_signature_on_non_function¦  s    z2TestSignatureObject.test_signature_on_non_functionc          	      sì   ddœdd„}G dd„ dƒ}t j |¡}t j ||ƒ¡}|  ||¡ t  ||ƒ¡}|  ||¡ ||ƒ}|`|  |  |¡d¡ t j‰ ‡ fdd	„}tj 	d
|¡F ||ƒ}|  
t  |¡¡ d|_|  t  |¡¡ |  t  |¡|¡ W d Q R X d S )NT)Úkwonlyc            _   s   d S )Nr   )r   r~   r  Ú	kwonlyreqr   r¦   r   r   r   r5  «  s    zITestSignatureObject.test_signature_from_functionlike_object.<locals>.funcc               @   s   e Zd Zdd„ Zdd„ ZdS )zMTestSignatureObject.test_signature_from_functionlike_object.<locals>.funclikec             S   s2   |j | _ |j| _|j| _|j| _|j| _|| _d S )N)r/   r   rË  Ú__defaults__Ú__kwdefaults__r5  )r8   r5  r   r   r   r£   ³  s    zVTestSignatureObject.test_signature_from_functionlike_object.<locals>.funclike.__init__c             _   s   | j ||ŽS )N)r5  )r8   r   r¦   r   r   r   rº  »  s    zVTestSignatureObject.test_signature_from_functionlike_object.<locals>.funclike.__call__N)r/   r>   r?   r£   rº  r   r   r   r   Úfunclike®  s   r  )))r   ..rñ  )r¦   ..rò  .c                s   t | dƒrdS ˆ | ƒS )NÚ_builtinmockT)rZ   )r;   )Ú_orig_isdescr   r   Ú_isdescÒ  s    
zLTestSignatureObject.test_signature_from_functionlike_object.<locals>._isdesczinspect.ismethoddescriptor)r2   rÇ  Úfrom_callablerš   rá  r  r  r¡   ZmockÚpatchr7   r  r.   )r8   r5  r  Zsig_funcZsig_funclikeZflr  Zbuiltin_funcr   )r  r   Ú'test_signature_from_functionlike_objectª  s&    z;TestSignatureObject.test_signature_from_functionlike_objectc                s:   ddœdd„‰ G ‡ fdd„dƒ}|   tt |¡ƒd¡ d S )NT)r  c            _   s   d S )Nr   )r   r~   r  r  r   r¦   r   r   r   r5  ã  s    zCTestSignatureObject.test_signature_functionlike_class.<locals>.funcc                   s2   e Zd Zdd„ Z” j Z ” jZ” jZ” jZ” jZdS )zGTestSignatureObject.test_signature_functionlike_class.<locals>.funclikec             S   s   d S )Nr   )r8   Zmarkerr   r   r   r£   ç  s    zPTestSignatureObject.test_signature_functionlike_class.<locals>.funclike.__init__N)r/   r>   r?   r£   r   rË  r  r  r   )r5  r   r   r  æ  s   r  z(marker))rš   rý   r2   rá  )r8   r  r   )r5  r   Ú!test_signature_functionlike_classß  s    
z5TestSignatureObject.test_signature_functionlike_classc          	   C   sx   G dd„ dƒ}|   |  |ƒ j¡dtf¡ |   |  |ƒ j¡d¡ |   |  |¡d¡ |  td¡ |  |ƒ ¡ W d Q R X d S )Nc               @   s4   e Zd Zdd„ Zdedœdd„Zdd„ Zd	d
„ ZdS )z:TestSignatureObject.test_signature_on_method.<locals>.Testc              W   s   d S )Nr   )r   r   r   r   r£   ô  s    zCTestSignatureObject.test_signature_on_method.<locals>.Test.__init__r   )rÊ  c             S   s   d S )Nr   )r8   r´  rµ  r   r   r   rè  ö  s    z=TestSignatureObject.test_signature_on_method.<locals>.Test.m1c              W   s   d S )Nr   )r   r   r   r   Úm2ø  s    z=TestSignatureObject.test_signature_on_method.<locals>.Test.m2c             S   s   d S )Nr   )r   r   r   r   rº  ú  s    zCTestSignatureObject.test_signature_on_method.<locals>.Test.__call__N)r   )r/   r>   r?   r£   r‘   rè  r  rº  r   r   r   r   ÚTestó  s   r  ))r´  ..rë  )rµ  r   .rë  )))r   ..rñ  .zinvalid method signature)rš   rá  rè  r‘   r  r[  r¯  )r8   r  r   r   r   Útest_signature_on_methodò  s    
z,TestSignatureObject.test_signature_on_methodc             C   s>   G dd„ dƒ}t  |ƒ j¡dd„ ƒ}|  |  |¡dtf¡ d S )Nc               @   s   e Zd Zdedœdd„ZdS )zETestSignatureObject.test_signature_wrapped_bound_method.<locals>.Testr   )rÊ  c             S   s   d S )Nr   )r8   r´  rµ  r   r   r   rè  	  s    zHTestSignatureObject.test_signature_wrapped_bound_method.<locals>.Test.m1N)r   )r/   r>   r?   r‘   rè  r   r   r   r   r  	  s   r  c              _   s   d S )Nr   )r   r¦   r   r   r   Úm1d	  s    zDTestSignatureObject.test_signature_wrapped_bound_method.<locals>.m1d))r´  ..rë  )rµ  r   .rë  )r»  r¼  rè  rš   rá  r‘   )r8   r  r  r   r   r   Ú#test_signature_wrapped_bound_method	  s
    z7TestSignatureObject.test_signature_wrapped_bound_methodc             C   sD   G dd„ dƒ}|ƒ j }|  |  |¡d¡ |j }|  |  |¡d¡ d S )Nc               @   s   e Zd Zeddœdd„ƒZdS )z?TestSignatureObject.test_signature_on_classmethod.<locals>.Testr   )rµ  c            S   s   d S )Nr   )r“   r´  rµ  r   r   r   r   	  s    zCTestSignatureObject.test_signature_on_classmethod.<locals>.Test.fooN)r/   r>   r?   rë  r   r   r   r   r   r  	  s   r  )))r´  ..rë  )rµ  r   .rí  .)r   rš   rá  )r8   r  Úmethr   r   r   Útest_signature_on_classmethod	  s    z1TestSignatureObject.test_signature_on_classmethodc             C   sD   G dd„ dƒ}|ƒ j }|  |  |¡d¡ |j }|  |  |¡d¡ d S )Nc               @   s   e Zd Zedd„ ƒZdS )z@TestSignatureObject.test_signature_on_staticmethod.<locals>.Testc            S   s   d S )Nr   )r“   r¶  r   r   r   r   .	  s    zDTestSignatureObject.test_signature_on_staticmethod.<locals>.Test.fooN)r/   r>   r?   rê  r   r   r   r   r   r  -	  s   r  )))r“   ..rë  )r¶  ..rí  .)r   rš   rá  )r8   r  r  r   r   r   Útest_signature_on_staticmethod,	  s    z2TestSignatureObject.test_signature_on_staticmethodc       
      C   sH  ddl m} tj}dd„ }|  |  ||ƒ¡d¡ |  td¡ t ||dƒ¡ W d Q R X |  td¡ t ||dd¡ W d Q R X 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d¡d¡ |  |  ||dd¡d¡ |  |  ||ddd¡d¡ tddœd d„}t |¡ }|_	|  |  |||dƒƒ¡d!d"d#td$ffdf¡ |  |  |||dƒdƒ¡d"d#td$ffdf¡ t |||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¡ t |¡j
d2d3d4}|  ||j|jŽd5¡ dGd6d&„}||d7d}t |¡j
d3d}|  ||j|jŽd8¡ t |¡ 
d3d9¡}|  ||j|jŽd:¡ t |¡j
d3d9d}|  ||j|jŽd:¡ t |¡j
d9d}|  ||j|jŽd;¡ ||d'd(d}t |¡ 
d9¡}|  ||j|jŽd<¡ d=d&„ }t |¡}|j ¡ }	|	d> j|jd?|	d>< |	d@ j|jd?|	d@< t |	 ¡ ¡|_	t |¡}|  t|ƒdA¡ |  |  ||dƒ¡dB¡ |  |  ||ddƒ¡dC¡ |  |  ||dddƒ¡dD¡ |  |  ||dddd¡dE¡ |  |  ||ddd¡dF¡ d S )HNr   )rÂ  c               S   s   d S )Nr   r   r   r   r   rÄ  C	  s    z;TestSignatureObject.test_signature_on_partial.<locals>.test)r   .zhas incorrect argumentsr   )r   c            S   s   d S )Nr   )r   r~   r   rÆ   r   r   r   rÄ  N	  s    )))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   ..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í  .c            _   s   d S )Nr   )r   r~   r   r¦   r   r   r   rÄ  x	  s    )))r   ..rñ  )r~   ..rí  )r¦   ..rò  .)))r   r   .rí  )r~   ..rí  )r¦   ..rò  .r¬   T)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Ê  c             S   s   d S )Nr   )r   r~   r   r   r   r   rÄ  §	  s    )r~   ..rë  r   .rë  c             S   s   | S )Nr   )r   r   r   r   r   ·	  s    z:TestSignatureObject.test_signature_on_partial.<locals>.foor:  é   )))r   r"  .rí  .c             S   s
   | ||fS )Nr   )r   r~   r   r   r   r   r   Á	  s    rF  )))r~   rF  .rí  )r   ..rí  .)r   rF  r:  c            S   s   | |||fS )Nr   )r   r~   r   rÆ   r   r   r   r   Ë	  s    )rÆ   r   )r~   rÆ   )))r   ..rë  )r~   r:  .rí  )r   r"  .rí  )rÆ   rF  .rí  .éÈ   r¾   )r   r~   )r#  r¾   r"  rF  c             S   s
   | ||fS )Nr   )r   r~   r   r   r   r   r   Ø	  s    é   )r¾   r   r$  r+  )r¾   r+  r$  )r   r+  r$  )r+  r:  r"  c             [   s   d S )Nr   )r   r~   r   rÆ   r¦   r   r   r   r   í	  s    r   )rX  r~   z(a, b, /, c, d, **kwargs))))r~   ..Úpositional_only)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   r¬   .rí  )rÆ   ..rí  )r¦   ..rò  .)r   r   r¬   )r»  rÂ  r2   rÅ  rš   rá  r[  r¯  r‘   rÈ  Úbindr   r¦   r#   ÚcopyrÙ  rÆ  rÇ  rÏ  rý   )
r8   rÂ  rÅ  rÄ  rÒ  Zpsigr   Z_fooÚbaÚparamsr   r   r   Útest_signature_on_partial>	  sº    



z-TestSignatureObject.test_signature_on_partialc          	      s¨   ddl m‰  G ‡ fdd„dƒ}|  td¡ t |j¡ W d Q R X G ‡ fdd„dƒ}|  |  |j¡d¡ |  |  |ƒ j¡d¡ G ‡ fd	d„dƒ}|  |  |j¡d
¡ d S )Nr   )r½  c                   s   e Zd Zdd„ Z” eƒZdS )zATestSignatureObject.test_signature_on_partialmethod.<locals>.Spamc               S   s   d S )Nr   r   r   r   r   rÄ  
  s    zFTestSignatureObject.test_signature_on_partialmethod.<locals>.Spam.testN)r/   r>   r?   rÄ  r¸  r   )r½  r   r   ÚSpam
  s   r+  zhas incorrect argumentsc                   s&   e Zd Zddœdd„Z” eddZdS )zATestSignatureObject.test_signature_on_partialmethod.<locals>.SpamrM   )rÊ  c            S   s   d S )Nr   )Úitr   r   r   r   r   rÄ  "
  s    zFTestSignatureObject.test_signature_on_partialmethod.<locals>.Spam.testr   )r   N)r/   r>   r?   rÄ  r¸  r   )r½  r   r   r+  !
  s   )))r,  ..rë  )r   ..rë  )r   r   .rí  rM   )))r   ..rë  )r   r   .rí  rM   c                   s$   e Zd Zddœdd„Z” edƒZdS )zATestSignatureObject.test_signature_on_partialmethod.<locals>.SpamÚanno)r8   c             S   s   d S )Nr   )r8   r†   r   r   r   rÄ  2
  s    zFTestSignatureObject.test_signature_on_partialmethod.<locals>.Spam.testr   N)r/   r>   r?   rÄ  rÉ   r   )r½  r   r   r+  1
  s   )))r8   .r-  rë  .)	r»  r½  r[  r¯  r2   rá  r¸  rš   rÉ   )r8   r+  r   )r½  r   Útest_signature_on_partialmethod
  s    z3TestSignatureObject.test_signature_on_partialmethodc             C   s(   dd„ }d|_ |  tt |¡ƒd¡ d S )Nc             S   s   d S )Nr   )r   r   r   r   r   <
  rn   zETestSignatureObject.test_signature_on_fake_partialmethod.<locals>.foorM   z(a))Ú_partialmethodrš   rý   r2   rá  )r8   r   r   r   r   Ú$test_signature_on_fake_partialmethod;
  s    z8TestSignatureObject.test_signature_on_fake_partialmethodc                sÖ   dd l ‰‡fdd„‰ G ‡ fdd„dƒ}|  |  |j¡d¡ |  |  |ƒ j¡d¡ |  | j|jdd	d
¡ ‡fdd„‰ G ‡ fdd„dƒ}|  |  |j¡d¡ |  |  |ƒ j¡d¡ dd„ }|j|_|  |  |¡d¡ d S )Nr   c                s    ˆ  ˆ ¡tdœ‡ fdd„ƒ}|S )N)rÊ  c                 s
   ˆ | |ŽS )Nr   )r   r¦   )r5  r   r   r  D
  s    zSTestSignatureObject.test_signature_on_decorated.<locals>.decorator.<locals>.wrapper)r¼  r‘   )r5  r  )r»  )r5  r   r  C
  s    zBTestSignatureObject.test_signature_on_decorated.<locals>.decoratorc                   s   e Zd Z” dd„ ƒZdS )z<TestSignatureObject.test_signature_on_decorated.<locals>.Fooc             S   s   d S )Nr   )r8   r   r~   r   r   r   r   J
  s    z@TestSignatureObject.test_signature_on_decorated.<locals>.Foo.barN)r/   r>   r?   r   r   )r  r   r   rd  I
  s   rd  )))r8   ..rë  )r   ..rë  )r~   ..rë  .)))r   ..rë  )r~   ..rë  .F)r
  )))r   ..rñ  )r¦   ..rò  .c                sN   ˆ  ˆ ¡tdœ‡ fdd„ƒ}t ˆ ¡}t|j ¡ ƒdd … }|j|d|_|S )N)rÊ  c                 s   ˆ d| ž|ŽS )Nr   )r   r   )r   r¦   )r5  r   r   r  b
  s    zSTestSignatureObject.test_signature_on_decorated.<locals>.decorator.<locals>.wrapperr   )r#   )	r¼  r‘   r2   rá  rÎ  r#   rÏ  rÙ  rÈ  )r5  r  rÒ  Ú
new_params)r»  )r5  r   r  a
  s    
c                   s   e Zd Z” dd„ ƒZdS )z<TestSignatureObject.test_signature_on_decorated.<locals>.Fooc             S   s   d S )Nr   )r8   r   r~   r   r   r   rº  k
  s    zETestSignatureObject.test_signature_on_decorated.<locals>.Foo.__call__N)r/   r>   r?   rº  r   )r  r   r   rd  j
  s   )))r~   ..rë  .c               S   s   d S )Nr   r   r   r   r   Úwrapped_foo_cally
  s    zITestSignatureObject.test_signature_on_decorated.<locals>.wrapped_foo_call)r»  rš   rá  r   rº  Ú__wrapped__)r8   rd  r2  r   )r  r»  r   Útest_signature_on_decorated@
  s&    	z/TestSignatureObject.test_signature_on_decoratedc             C   s>  G dd„ dƒ}|   |  |¡d¡ G dd„ dtƒ}G dd„ d|d}|   |  |¡d¡ G dd„ dtƒ}G d	d„ d|d}|   |  |¡d
¡ |   |  |¡d¡ G dd„ dtƒ}G dd„ dt|d}G dd„ d|d}|   |  |¡d¡ |   |  |¡d¡ |   |  |¡d
¡ G dd„ dtƒ}G dd„ d|d}|   |  |¡d¡ d S )Nc               @   s   e Zd Zdd„ ZdS )z6TestSignatureObject.test_signature_on_class.<locals>.Cc             S   s   d S )Nr   )r8   r   r   r   r   r£   …
  s    z?TestSignatureObject.test_signature_on_class.<locals>.C.__init__N)r/   r>   r?   r£   r   r   r   r   r€   „
  s   r€   )))r   ..rë  .c               @   s   e Zd Zdd„ ZdS )z7TestSignatureObject.test_signature_on_class.<locals>.CMc             S   s   d S )Nr   )r“   r   r   r   r   rº  
  s    z@TestSignatureObject.test_signature_on_class.<locals>.CM.__call__N)r/   r>   r?   rº  r   r   r   r   r  Œ
  s   r  c               @   s   e Zd Zdd„ ZdS )z6TestSignatureObject.test_signature_on_class.<locals>.Cc             S   s   d S )Nr   )r8   r~   r   r   r   r£   
  s    z?TestSignatureObject.test_signature_on_class.<locals>.C.__init__N)r/   r>   r?   r£   r   r   r   r   r€   
  s   )rŒ   c                   s"   e Zd Zddœ‡ fdd„
Z‡  ZS )z7TestSignatureObject.test_signature_on_class.<locals>.CMr   )r   c               s   t ƒ  | |||¡S )N)rƒ  r¿  )Úmclsr!  ÚbasesÚdctr   )r„  r   r   r¿  ˜
  s    z?TestSignatureObject.test_signature_on_class.<locals>.CM.__new__)r/   r>   r?   r¿  rŠ  r   r   )r„  r   r  —
  s   c               @   s   e Zd Zdd„ ZdS )z6TestSignatureObject.test_signature_on_class.<locals>.Cc             S   s   d S )Nr   )r8   r~   r   r   r   r£   ›
  s    z?TestSignatureObject.test_signature_on_class.<locals>.C.__init__N)r/   r>   r?   r£   r   r   r   r   r€   š
  s   )))r~   ..rë  .)))r!  ..rë  )r6  ..rë  )r7  ..rë  )r   r   .rí  .c                   s*   e Zd Zddœ‡ fdd„
Zdd„ Z‡  ZS )z8TestSignatureObject.test_signature_on_class.<locals>.CMMr   )r   c               s   t ƒ  | |||¡S )N)rƒ  r¿  )r5  r!  r6  r7  r   )r„  r   r   r¿  ª
  s    z@TestSignatureObject.test_signature_on_class.<locals>.CMM.__new__c             S   s   t |||ƒS )N)r]   )r“   ÚnmÚbsÚdtr   r   r   rº  ¬
  s    zATestSignatureObject.test_signature_on_class.<locals>.CMM.__call__)r/   r>   r?   r¿  rº  rŠ  r   r   )r„  r   ÚCMM©
  s   r;  c                   s"   e Zd Zddœ‡ fdd„
Z‡  ZS )z7TestSignatureObject.test_signature_on_class.<locals>.CMr   )r   c               s   t ƒ  | |||¡S )N)rƒ  r¿  )r5  r!  r6  r7  r   )r„  r   r   r¿  ¯
  s    z?TestSignatureObject.test_signature_on_class.<locals>.CM.__new__)r/   r>   r?   r¿  rŠ  r   r   )r„  r   r  ®
  s   c               @   s   e Zd Zdd„ ZdS )z6TestSignatureObject.test_signature_on_class.<locals>.Cc             S   s   d S )Nr   )r8   r~   r   r   r   r£   ²
  s    z?TestSignatureObject.test_signature_on_class.<locals>.C.__init__N)r/   r>   r?   r£   r   r   r   r   r€   ±
  s   )))r8  ..rë  )r9  ..rë  )r:  ..rë  .c                   s"   e Zd Zddœ‡ fdd„
Z‡  ZS )z7TestSignatureObject.test_signature_on_class.<locals>.CMr   )r   c               s   t ƒ  |||¡S )N)rƒ  r£   )r“   r!  r6  r7  r   )r„  r   r   r£   Ç
  s    z@TestSignatureObject.test_signature_on_class.<locals>.CM.__init__)r/   r>   r?   r£   rŠ  r   r   )r„  r   r  Æ
  s   c               @   s   e Zd Zdd„ ZdS )z6TestSignatureObject.test_signature_on_class.<locals>.Cc             S   s   d S )Nr   )r8   r~   r   r   r   r£   Ê
  s    z?TestSignatureObject.test_signature_on_class.<locals>.C.__init__N)r/   r>   r?   r£   r   r   r   r   r€   É
  s   )))r!  ..rë  )r6  ..rë  )r7  ..rë  )r   r   .rí  .)rš   rá  r]   )r8   r€   r  r;  r   r   r   Útest_signature_on_classƒ
  s4    z+TestSignatureObject.test_signature_on_classc          	   C   sÂ   G dd„ dƒ}|   tt |¡ƒd¡ G dd„ d|ƒ}|   tt |¡ƒd¡ G dd„ dtƒ}G dd„ d|ƒ}|  td¡ |   t |¡d ¡ W d Q R X |  td¡ |   t |¡d ¡ W d Q R X d S )	Nc               @   s   e Zd ZdS )zCTestSignatureObject.test_signature_on_class_without_init.<locals>.CN)r/   r>   r?   r   r   r   r   r€   Ø
  s    r€   z()c               @   s   e Zd ZdS )zCTestSignatureObject.test_signature_on_class_without_init.<locals>.DN)r/   r>   r?   r   r   r   r   r–  Ú
  s    r–  c               @   s   e Zd ZdS )zCTestSignatureObject.test_signature_on_class_without_init.<locals>.CN)r/   r>   r?   r   r   r   r   r€   Þ
  s    c               @   s   e Zd ZdS )zCTestSignatureObject.test_signature_on_class_without_init.<locals>.DN)r/   r>   r?   r   r   r   r   r–  ß
  s    zcallable.*is not supported)rš   rý   r2   rá  r]   r[  r¯  )r8   r€   r–  r   r   r   Ú$test_signature_on_class_without_initÔ
  s    z8TestSignatureObject.test_signature_on_class_without_initc             C   sÚ   |   tt tj¡ƒd¡ G dd„ dtjƒ}G dd„ dƒ}G dd„ d||ƒ}|   tt |¡ƒd¡ |   tt |¡ƒd¡ G dd	„ d	|ƒ}|   tt |¡ƒd
¡ G dd„ dtƒ}G dd„ d||d}|   tt |¡ƒd¡ d S )Nz'(file, protocol=None, fix_imports=True)c               @   s   e Zd ZdS )z>TestSignatureObject.test_signature_on_builtin_class.<locals>.PN)r/   r>   r?   r   r   r   r   rÜ  ë
  s    rÜ  c               @   s   e Zd ZdS )zGTestSignatureObject.test_signature_on_builtin_class.<locals>.EmptyTraitN)r/   r>   r?   r   r   r   r   Ú
EmptyTraitì
  s    r>  c               @   s   e Zd ZdS )z?TestSignatureObject.test_signature_on_builtin_class.<locals>.P2N)r/   r>   r?   r   r   r   r   ÚP2í
  s    r?  c               @   s   e Zd Zdd„ ZdS )z?TestSignatureObject.test_signature_on_builtin_class.<locals>.P3c             S   s   d S )Nr   )r8   rM   r   r   r   r£   ô
  s    zHTestSignatureObject.test_signature_on_builtin_class.<locals>.P3.__init__N)r/   r>   r?   r£   r   r   r   r   ÚP3ó
  s   r@  z(spam)c               @   s   e Zd Zdd„ ZdS )zBTestSignatureObject.test_signature_on_builtin_class.<locals>.MetaPc             S   s   d S )Nr   )r“   r   r   r   r   r   rº  ù
  s    zKTestSignatureObject.test_signature_on_builtin_class.<locals>.MetaP.__call__N)r/   r>   r?   rº  r   r   r   r   ÚMetaPø
  s   rA  c               @   s   e Zd ZdS )z?TestSignatureObject.test_signature_on_builtin_class.<locals>.P4N)r/   r>   r?   r   r   r   r   ÚP4û
  s   rB  )rŒ   z
(foo, bar))rš   rý   r2   rá  rÑ  rÒ  r]   )r8   rÜ  r>  r?  r@  rA  rB  r   r   r   Útest_signature_on_builtin_classå
  s    z3TestSignatureObject.test_signature_on_builtin_classc          	   C   sÐ   G dd„ dƒ}|   |  |ƒ ¡d¡ G dd„ dƒ}|  td¡ t |ƒ ¡ W d Q R X G dd„ d||ƒ}|   |  |ƒ ¡d¡ G d	d
„ d
ƒ}dd„ |_|   |  |¡d¡ ||_|  td¡ |  |¡ W d Q R X d S )Nc               @   s   e Zd Zdd„ ZdS )zCTestSignatureObject.test_signature_on_callable_objects.<locals>.Fooc             S   s   d S )Nr   )r8   r   r   r   r   rº    s    zLTestSignatureObject.test_signature_on_callable_objects.<locals>.Foo.__call__N)r/   r>   r?   rº  r   r   r   r   rd     s   rd  )))r   ..rë  .c               @   s   e Zd ZdS )zDTestSignatureObject.test_signature_on_callable_objects.<locals>.SpamN)r/   r>   r?   r   r   r   r   r+    s   r+  zis not a callable objectc               @   s   e Zd ZdS )zCTestSignatureObject.test_signature_on_callable_objects.<locals>.BarN)r/   r>   r?   r   r   r   r   ÚBar  s   rD  c               @   s   e Zd ZdS )zGTestSignatureObject.test_signature_on_callable_objects.<locals>.WrappedN)r/   r>   r?   r   r   r   r   ÚWrapped  s   rE  c             S   s   d S )Nr   )r   r   r   r   rr     rn   zHTestSignatureObject.test_signature_on_callable_objects.<locals>.<lambda>zwrapper loop)rš   rá  r[  r  r2   r3  r¯  )r8   rd  r+  rD  rE  r   r   r   Ú"test_signature_on_callable_objectsÿ
  s     
z6TestSignatureObject.test_signature_on_callable_objectsc             C   s   |   |  ddd„¡d¡ d S )Nr:  c             S   s   | S )Nr   )r   r   r   r   rr      rn   z?TestSignatureObject.test_signature_on_lambdas.<locals>.<lambda>)))r   r:  .rë  .)r:  )rš   rá  )r8   r   r   r   Útest_signature_on_lambdas  s    z-TestSignatureObject.test_signature_on_lambdasc             C   sP  t tdœdd„}|  t |¡dk¡ |  t |¡dk¡ |  t |¡tƒ k¡ |  t |¡tƒ k¡ t tdœdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  tt |¡ƒtt |¡ƒ¡ t t dœdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  	tt |¡ƒtt |¡ƒ¡ t dœd	d„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  	tt |¡ƒtt |¡ƒ¡ ddœt tdœd
d„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  	tt |¡ƒtt |¡ƒ¡ tdœdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  	tt |¡ƒtt |¡ƒ¡ t tdœdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  	tt |¡ƒtt |¡ƒ¡ t tdœdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  	tt |¡ƒtt |¡ƒ¡ dd„ }dd„ }|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  tt |¡ƒtt |¡ƒ¡ ddœdd„}ddœdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  tt |¡ƒtt |¡ƒ¡ ddœdd„}ddœdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  tt |¡ƒtt |¡ƒ¡ dd„ }ddœdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  	tt |¡ƒtt |¡ƒ¡ ddœt dœdd„}ddœt dœdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  tt |¡ƒtt |¡ƒ¡ d S )N)r~   rÊ  c            S   s   d S )Nr   )r   r~   r   r   r   r   %  rn   z8TestSignatureObject.test_signature_equality.<locals>.foor   c            S   s   d S )Nr   )r   r~   r   r   r   r   +  rn   z8TestSignatureObject.test_signature_equality.<locals>.barc            S   s   d S )Nr   )r   r~   r   r   r   r   1  rn   )r~   c            S   s   d S )Nr   )r   r~   r   r   r   r   7  rn   c            S   s   d S )Nr   )r   r~   r   r   r   r   =  rn   )rÊ  c            S   s   d S )Nr   )r   r   r   r   r   r   C  rn   c             S   s   d S )Nr   )r   r~   r   r   r   r   I  rn   c             S   s   d S )Nr   )r~   r   r   r   r   rM   N  rn   z9TestSignatureObject.test_signature_equality.<locals>.spamc             S   s   d S )Nr   )r   r~   r   r   r   r   r   T  rn   c             S   s   d S )Nr   )r   r~   r   r   r   r   r   U  rn   r   )r   c             S   s   d S )Nr   )r   r~   r   r   r   r   r   [  rn   c             S   s   d S )Nr   )r   r~   r   r   r   r   r   \  rn   c            S   s   d S )Nr   )Úposr   r~   r   r   r   r   r   b  rn   c            S   s   d S )Nr   )rH  r   r~   r   r   r   r   r   c  rn   c            S   s   d S )Nr   )rH  r   r~   r   r   r   r   r   i  rn   c            S   s   d S )Nr   )rH  r   r~   r   r   r   r   r   j  rn   )r¦   c            _   s   d S )Nr   )rH  r   r~   r   r   r¦   r   r   r   r   p  rn   c            _   s   d S )Nr   )rH  r   r~   r   r   r¦   r   r   r   r   q  rn   )
r‘   rî  r7   r2   rá  r.   rP   rš   Úhashr  )r8   r   r   rM   r   r   r   Útest_signature_equality$  sŒ    z+TestSignatureObject.test_signature_equalityc          	   C   sô   t j}t j}dd„ }t  |¡}||d|jƒgd}|  t|ƒt|ƒ¡ |  t|ƒt|jddƒ¡ ddœd	d
„}|  t|ƒtt  |¡ƒ¡ i fdd„}|  	t
d¡ tt  |¡ƒ W d Q R X i dœdd„}|  	t
d¡ tt  |¡ƒ W d Q R X d S )Nc             S   s   d S )Nr   )r   r   r   r   r   {  rn   z8TestSignatureObject.test_signature_hashable.<locals>.foor   )r#   rM   )rÐ  r   )rÊ  c             S   s   d S )Nr   )r   r   r   r   r   „  rn   z8TestSignatureObject.test_signature_hashable.<locals>.barc             S   s   d S )Nr   )r   r   r   r   r   ‡  rn   zunhashable typec             S   s   d S )Nr   )r   r   r   r   r   ‹  rn   )r2   rÇ  rÅ  rá  ÚPOSITIONAL_OR_KEYWORDrš   rI  r  rÙ  r[  r  )r8   rÛ  rÜ  r   Úfoo_sigZ
manual_sigr   r   r   r   Útest_signature_hashablew  s     

z+TestSignatureObject.test_signature_hashablec             C   s~   dd dœt ddœdd„}|  tt |¡ƒd¡ dd dœt ddœdd„}|  tt |¡ƒd	¡ d
d„ }|  tt |¡ƒd¡ d S )Nr   )r   r   )r   rÊ  c            [   s   d S )Nr   )r   r~   r   r¦   r   r   r   r     s    z3TestSignatureObject.test_signature_str.<locals>.fooz*(a: int = 1, *, b, c=None, **kwargs) -> 42c            _   s   d S )Nr   )r   r~   r   r   r¦   r   r   r   r   •  s    z.(a: int = 1, *args, b, c=None, **kwargs) -> 42c               S   s   d S )Nr   r   r   r   r   r   š  s    z())r   )r   )r‘   rš   rý   r2   rá  )r8   r   r   r   r   Útest_signature_str  s    z&TestSignatureObject.test_signature_strc             C   sÞ   t j}t j}dd„ }t  |¡}t|j ¡ ƒ}|d j|jd|d< |j|d|_	|  
tt  |¡ƒd¡ |  
t||d|jƒgdƒd¡ |  
t||d|jƒ|d	|jƒgdƒd
¡ |  
t||d|jƒ|d	|jƒgdƒd¡ d S )Nc            [   s   | |fS )Nr   )Úa_por~   r¦   r   r   r   rÄ  ¢  s    zDTestSignatureObject.test_signature_str_positional_only.<locals>.testr   )rX  )r#   z(a_po, /, *, b, **kwargs)r   z(foo, /)r   z(foo, /, **bar)z(foo, /, *bar))r2   rÅ  rÇ  rá  r{   r#   rÏ  rÙ  rÆ  rÈ  rš   rý   r]  ÚVAR_POSITIONAL)r8   rÜ  rÛ  rÄ  rÒ  r1  r   r   r   Ú"test_signature_str_positional_onlyž  s&    


z6TestSignatureObject.test_signature_str_positional_onlyc             C   s€   ddœdd„}t  |¡}|jd d}|  |jd ¡ |j|jd}|  |j|j¡ |jdd}|  |jd¡ |  |t  |¡¡ d S )Nr   )rÊ  c               S   s   d S )Nr   r   r   r   r   rÄ  »  s    z=TestSignatureObject.test_signature_replace_anno.<locals>.test)rÐ  )r2   rá  rÙ  r°   rÐ  rÊ  rš   )r8   rÄ  rÒ  r   r   r   Útest_signature_replace_annoº  s    
z/TestSignatureObject.test_signature_replace_annoc             C   sR   G dd„ dƒ}G dd„ d|ƒ}|   |  |j¡d¡ |   |  |j¡|  |j¡¡ d S )Nc               @   s$   e Zd Zd	ddœdddœdd„ZdS )
zFTestSignatureObject.test_signature_on_mangled_parameters.<locals>.Spamr   r¬   )Ú	_Spam__p2r   )Ú	_Spam__p1rS  c            S   s   d S )Nr   )r8   rT  rS  r   r   r   r   É  s    zJTestSignatureObject.test_signature_on_mangled_parameters.<locals>.Spam.fooN)r   )r/   r>   r?   r   r   r   r   r   r+  È  s   r+  c               @   s   e Zd ZdS )zETestSignatureObject.test_signature_on_mangled_parameters.<locals>.HamN)r/   r>   r?   r   r   r   r   ÚHamË  s   rU  )))r8   ..rë  )rT  r   r   rë  )rS  r¬   r   rí  .)rš   rá  r   )r8   r+  rU  r   r   r   Ú$test_signature_on_mangled_parametersÇ  s    z8TestSignatureObject.test_signature_on_mangled_parametersc             C   s>   G dd„ dt jƒ}ddœdd„}| |¡}|  t||ƒ¡ d S )Nc               @   s   e Zd ZdS )zPTestSignatureObject.test_signature_from_callable_python_obj.<locals>.MySignatureN)r/   r>   r?   r   r   r   r   rÇ  Ø  s    rÇ  r   )r~   c            S   s   d S )Nr   )r   r~   r   r   r   r   Ù  rn   zHTestSignatureObject.test_signature_from_callable_python_obj.<locals>.foo)r2   rÇ  r  r.   r÷  )r8   rÇ  r   rL  r   r   r   Ú'test_signature_from_callable_python_obj×  s    
z;TestSignatureObject.test_signature_from_callable_python_objc             C   s2   G dd„ dt jƒ}| tj¡}|  t||ƒ¡ d S )Nc               @   s   e Zd ZdS )zQTestSignatureObject.test_signature_from_callable_builtin_obj.<locals>.MySignatureN)r/   r>   r?   r   r   r   r   rÇ  à  s    rÇ  )r2   rÇ  r  rÑ  rÒ  r.   r÷  )r8   rÇ  rÒ  r   r   r   Ú(test_signature_from_callable_builtin_objÝ  s    z<TestSignatureObject.test_signature_from_callable_builtin_objc             C   sf   x@t ƒ D ]6}t |¡}t|jƒ}t|ƒ}|  |¡ |  ||¡ qW t t¡}t|jƒ}|  |t	¡ d S )N)
r(   r2   rá  r{   r#   rß  r.   rš   r+   rà  )r8   r  rá  râ  rã  r   r   r   Ú3test_signature_definition_order_preserved_on_kwonlyä  s    




zGTestSignatureObject.test_signature_definition_order_preserved_on_kwonlyN)-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   r!  r*  r.  r0  r4  r<  r=  rC  rF  rG  rJ  rM  rN  rQ  rR  rV  rW  rX  rY  r   r   r   r   rÉ  ”  sZ   /#G5 Y%CQ SrÉ  c               @   sP   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	dd„ ƒZ
dd„ ZdS )ÚTestParameterObjectc             C   sl   t j}|  |j|j  k o:|j  k o:|j  k o:|jk n  ¡ |  t	|jƒd¡ |  dt
|jƒk¡ d S )NrÆ  )r2   rÅ  r.   rÆ  rK  rP  ÚKEYWORD_ONLYr]  rš   rý   r¯  )r8   rÜ  r   r   r   Útest_signature_parameter_kindsñ  s
    (z2TestParameterObject.test_signature_parameter_kindsc          	   C   sà  t jddt jjd}|  |jd¡ |  |jd¡ |  |j|j¡ |  |j	t jj¡ |  
td¡ t jdddd W d Q R X |  
td¡ t jdt jjd W d Q R X |  
td	¡ t jd t jjd W d Q R X |  
td
¡ t jdt jjd W d Q R X |  
td
¡ t jdt jjd W d Q R X |  
td¡ t jddt jjd W d Q R X |  
td¡ t jddt jjd W d Q R X t jddt jjd}|  
td¡ |jt jjd W d Q R X |  t|ƒ d¡¡ |  dt|ƒk¡ d S )Nr   r:  )rY  rX  z)value '123' is not a valid Parameter.kindÚ123znot a valid parameter nameré  )rX  zname must be a strzis not a valid parameter nameú$z.azcannot have default valuesr   r   z
<Parameterz"a=42")r2   rÅ  rÆ  rš   r!  rY  r°   rË  rÊ  rX  r[  r¯  r]  r  rP  rK  rÙ  r.   r¯  rÚ  )r8   r%   r   r   r   Útest_signature_parameter_objectù  s<    z3TestParameterObject.test_signature_parameter_objectc          	   C   st   t j}|d|jd}|  t|ƒt|d|jdƒ¡ |  t|ƒt|d|jddƒ¡ |  t|ƒt|j|jdƒ¡ d S )Nr   )rX  r   )rX  rY  )r2   rÅ  rÆ  rš   rI  r  rÙ  rP  )r8   rÜ  r   r   r   r   Ú!test_signature_parameter_hashable#  s    
z5TestParameterObject.test_signature_parameter_hashablec             C   s¬   t j}|ddt jjd}|  ||k¡ |  ||k¡ |  |dk¡ |  |dk¡ |  |tƒ k¡ |  |tƒ k¡ |  ||ddt jjdk¡ |  ||ddt jjdk¡ d S )Nr   r   )rY  rX  )r2   rÅ  r[  r.   r7   rP   )r8   rÜ  r%   r   r   r   Ú!test_signature_parameter_equality,  s    z5TestParameterObject.test_signature_parameter_equalityc          	   C   sl  t jddt jjd}|  || ¡ ¡ |  || ¡ ¡ |jdd}|  |jd¡ |j|jd}|  ||¡ |jdd}|  |jd¡ |  	||¡ |  
td¡ |j|jd}W d Q R X |jdd d	}|  |jd ¡ |  	||¡ |jd|jd	}|  |j|j¡ |jd|jd}|  |j|j¡ |  	||¡ |  
td
¡ |j|jd}W d Q R X |j|jd}|  ||¡ d S )Nr   r   )rY  rX  r   )rË  r   )r!  zname is a required attribute)r!  rY  z<value <class 'inspect._empty'> is not a valid Parameter.kind)rX  )r2   rÅ  r[  r™  rÙ  rš   rË  rÊ  r!  r  r[  r¯  r°   rY  rK  rX  )r8   r%   Zp2r   r   r   Ú test_signature_parameter_replace<  s6    z4TestParameterObject.test_signature_parameter_replacec          	   C   s.   |   td¡ tjd tjjd W d Q R X d S )Nzname must be a str)rX  )r[  r  r2   rÅ  rÆ  )r8   r   r   r   Ú(test_signature_parameter_positional_onlyd  s    z<TestParameterObject.test_signature_parameter_positional_onlyc          	   C   s`   |   td¡ tjdtjjd W d Q R X tjdtjjd}|  |jtjj¡ |  |jd¡ d S )NzYimplicit arguments must be passed as positional or keyword arguments, not positional-onlyz.0)rX  Z	implicit0)	r[  r¯  r2   rÅ  rÆ  rK  rš   rX  r!  )r8   rÌ  r   r   r   Ú!test_signature_parameter_implicith  s    z5TestParameterObject.test_signature_parameter_implicitc          	   C   sN   t jdt jjd}|  t¡ d|_W d Q R X |  t¡ d|_W d Q R X d S )NrM   )rX  r   rZ  )r2   rÅ  r[  r  r  r   rX  )r8   r%   r   r   r   Ú%test_signature_parameter_immutabilityu  s
    z9TestParameterObject.test_signature_parameter_immutabilityN)r/   r>   r?   r\  r_  r`  ra  rb  rc  r   rd  re  r   r   r   r   rZ  ð  s   *	(rZ  c               @   s„   e Zd Ze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d„ Zdd„ Zedd„ ƒZdS )ÚTestSignatureBindc             O   s$   t  | ¡}|j||Ž}| |j|jŽS )N)r2   rá  r&  r   r¦   )r5  r   r¦   rÒ  r(  r   r   r   Úcall€  s    
zTestSignatureBind.callc          	   C   s   dd„ }|   |  |¡d¡ |  td¡ |  |d¡ W d Q R X |  td¡ | j|ddd W d Q R X |  td¡ | j|dd W d Q R X d S )	Nc               S   s   dS )Nr   r   r   r   r   r   rÄ  ‡  s    z9TestSignatureBind.test_signature_bind_empty.<locals>.testr   ztoo many positional argumentsr   r:  )rM   z)got an unexpected keyword argument 'spam')rš   rg  r[  r  )r8   rÄ  r   r   r   Útest_signature_bind_empty†  s    
z+TestSignatureBind.test_signature_bind_emptyc             C   sÒ   dd„ }|   |  |¡di f¡ |   |  |d¡di f¡ |   |  |dd¡di f¡ |   | j|dd	dd
dif¡ |   | j|ddd	dd
dif¡ |   | j|dddddif¡ |   | j|dddd	dd
dif¡ d S )Nc              _   s   | |fS )Nr   )r   r¦   r   r   r   rÄ  •  s    z7TestSignatureBind.test_signature_bind_var.<locals>.testr   r   )r   r   )r   r   r   )r   r   r:  )r   r   )rš   rg  )r8   rÄ  r   r   r   Útest_signature_bind_var”  s     z)TestSignatureBind.test_signature_bind_varc          	   C   s  dd„ }|   |  |ddd¡d¡ |  td¡ |  |dddd¡ W d Q R X |  td	¡ |  |d¡ W d Q R X |  td
¡ |  |¡ W d Q R X ddd„}|   |  |ddd¡d¡ |   |  |dd¡d¡ ddd„}|   | j|dddd¡ |   | j|ddd¡ |   | j|ddd¡ d S )Nc             S   s
   | ||fS )Nr   )r   r~   r   r   r   r   rÄ  ¢  s    z=TestSignatureBind.test_signature_bind_just_args.<locals>.testr   r   r¬   )r   r   r¬   ztoo many positional argumentsr®  z missing a required argument: 'b'z missing a required argument: 'a'r:  c             S   s
   | ||fS )Nr   )r   r~   r   r   r   r   rÄ  ²  s    )r   r   r:  c             S   s
   | ||fS )Nr   )r   r~   r   r   r   r   rÄ  ·  s    r$  )r   r   )r:  r   r$  )r   )r:  r   r¬   )r~   )r   r:  r¬   )r:  )r   r   r¬   )rš   rg  r[  r  )r8   rÄ  r   r   r   Útest_signature_bind_just_args¡  s"    

z/TestSignatureBind.test_signature_bind_just_argsc             C   s6   dd„ }|   |  |¡d¡ |   |  |ddd¡d¡ d S )Nc              W   s   | S )Nr   )r   r   r   r   rÄ  ¾  s    zATestSignatureBind.test_signature_bind_varargs_order.<locals>.testr   r   r   r¬   )r   r   r¬   )rš   rg  )r8   rÄ  r   r   r   Ú!test_signature_bind_varargs_order½  s    z3TestSignatureBind.test_signature_bind_varargs_orderc          
   C   sœ   ddd„}|   |  |ddddd¡d¡ |   |  |dd¡d	¡ |   | j|ddd
d¡ |   | j|dddd	¡ |  td¡ | j|ddddd W d Q R X d S )Nr¬   c             W   s   | |||fS )Nr   )r   r~   r   r   r   r   r   rÄ  Å  s    zDTestSignatureBind.test_signature_bind_args_and_varargs.<locals>.testr   r   r®  rŽ   )r   r   r¬   )r®  rŽ   )r   r   r¬   r   )r~   r   )r   r   r¬   r   )r~   z multiple values for argument 'c')r   )r¬   )rš   rg  r[  r  )r8   rÄ  r   r   r   Ú$test_signature_bind_args_and_varargsÄ  s    
z6TestSignatureBind.test_signature_bind_args_and_varargsc             C   s<   dd„ }|   |  |¡i ¡ |   | j|ddddddœ¡ d S )Nc              [   s   | S )Nr   )r¦   r   r   r   rÄ  Ò  s    z?TestSignatureBind.test_signature_bind_just_kwargs.<locals>.testr   r¸  )r   rM   )rš   rg  )r8   rÄ  r   r   r   Útest_signature_bind_just_kwargsÑ  s    z1TestSignatureBind.test_signature_bind_just_kwargsc          
   C   sJ  ddd„}|   |  |dd¡dddi f¡ |   | j|dddddddddddœf¡ |   | j|ddddd	ddddddœf¡ |   | j|ddddd
ddddddœf¡ |   | j|dddddddddddœf¡ |   | j|ddddddddddddœf¡ |   | j|ddddddddddif¡ |   | j|dddddddi f¡ d S )Nr¬   c             [   s   | |||fS )Nr   )r   r~   r   r¦   r   r   r   rÄ  Ú  s    zCTestSignatureBind.test_signature_bind_args_and_kwargs.<locals>.testr   r   r   r¸  )r   rM   )r~   r   r   rM   )r   r~   r   rM   )r~   r   rM   r®  )r~   r   r   rM   )r   r   rŽ   )r   r   r~   )r¬   )rš   rg  )r8   rÄ  r   r   r   Ú#test_signature_bind_args_and_kwargsÙ  s     
z5TestSignatureBind.test_signature_bind_args_and_kwargsc          	   C   sT  dd„ }|   td¡ |  |d¡ W d Q R X |  | j|ddd¡ ddœdd„}|   td¡ |  |d¡ W d Q R X dd„ }|  | j|dd	d
d¡ |  | j|d	ddd¡ |   td¡ | j|d	ddd W d Q R X |   td¡ |  |dd	¡ W d Q R X |   td¡ | j|dd	d	d
 W d Q R X |   td¡ | j|dd	dd W d Q R X |   td¡ |  |d¡ W d Q R X dd„ }|  | j|dd	d
dd	i f¡ |  | j|dd	ddd	i f¡ |  | j|dd	dddd	ddif¡ |  | j|ddd	ddd	ddif¡ |   td¡ | j|dd	d W d Q R X |  | j|dd	ddddd	dddœf¡ d S )Nc             S   s   | S )Nr   )r   r   r   r   rÄ  î  s    z:TestSignatureBind.test_signature_bind_kwonly.<locals>.testztoo many positional argumentsr   )r   c            S   s   |S )Nr   )r   r   r   r   r   r   rÄ  õ  s    z"missing a required argument: 'bar'c            S   s   | |fS )Nr   )r   r   r   r   r   rÄ  û  s    r   )r   )r   r   )r   r   z)got an unexpected keyword argument 'spam'r:  )r   r   rM   r¸  )r   rM   c            [   s
   | ||fS )Nr   )r   r   Úbinr   r   r   rÄ    s    )r   r   rM   )rM   r   r   z"missing a required argument: 'foo')rM   r   )r   ro  rM   )ro  rM   )r[  r  rg  rš   )r8   rÄ  r   r   r   Útest_signature_bind_kwonlyí  sN    

z,TestSignatureBind.test_signature_bind_kwonlyc             C   s‚   ddœdd„}t  |¡}|jddddd	d
d}|  t|j ¡ ƒdddddd	d
dœff¡ |  |jddd	d
dœ¡ |  |jd¡ d S )NrÓ  )r   c            _   s   d S )Nr   )r   r~   r   r   r¦   r   r   r   rÄ  %  s    z=TestSignatureBind.test_signature_bind_arguments.<locals>.testr:  r"  rF  rM  r   é<   )r~   r   r   r¦   )r   r:  )r   )r"  )r~   rF  r¦   )r   r   r¦   )r:  r"  )	r2   rá  r&  rš   rÎ  Ú	argumentsÚitemsr¦   r   )r8   rÄ  rÒ  r(  r   r   r   Útest_signature_bind_arguments$  s    
z/TestSignatureBind.test_signature_bind_argumentsc          
   C   sf  t j}dddœdd„}t  |¡}t t|j ¡ ƒ¡}x"dD ]}|| j|j	d||< q:W |j| 
¡ d	}||_|  | j|d
dddddd
ddddi f¡ |  |  |d
d¡d
ddddi f¡ |  | j|d
ddddd
ddddi f¡ |  td¡ | j|d
ddddd W d Q R X |  td¡ | j|d
ddd W d Q R X |  td¡ | j|d
dd W d Q R X d S )Nr¬   r   r   )r   c            [   s   | |||||fS )Nr   )rO  Úb_poÚc_por   r   r¦   r   r   r   rÄ  5  s    zCTestSignatureBind.test_signature_bind_positional_only.<locals>.test)rO  ru  rv  )rX  )r#   r   r   r®  rŽ   é   )r   r   zbut was passed as a keywordr:  )r   r   rv  zparameter is positional only)rv  )rO  ru  )r¬   r   )r2   rÅ  rá  rå  ræ  rÎ  r#   rs  rÙ  rÆ  rÏ  rÈ  rš   rg  r[  r  )r8   rÜ  rÄ  rÒ  r1  r!  Znew_sigr   r   r   Ú#test_signature_bind_positional_only2  s(    

 z5TestSignatureBind.test_signature_bind_positional_onlyc             C   sP   dd„ }t  |¡}| ddd¡}|  |jd¡ |jdddd}|  |jd¡ d S )Nc             S   s   d S )Nr   )r   r8   r~   r   r   r   rÄ  S  s    zATestSignatureBind.test_signature_bind_with_self_arg.<locals>.testr   r   r¬   )r   r   r¬   )r8   r~   )r2   rá  r&  rš   r   )r8   rÄ  rÒ  r(  r   r   r   Ú!test_signature_bind_with_self_argQ  s    
z3TestSignatureBind.test_signature_bind_with_self_argc          	   C   sŽ   dd„ }t  |¡}|  td¡ |jddd W d Q R X dd„ }|  | j|ddd	d
dif¡ t  |¡}|jdd}|  |jdd
dii¡ d S )Nc             W   s   | |fS )Nr   )r   r   r   r   r   rÄ  \  s    z?TestSignatureBind.test_signature_bind_vararg_name.<locals>.testz)got an unexpected keyword argument 'args'r   r   )r   r   c              _   s   | |fS )Nr   )r   r¦   r   r   r   rÄ  e  s    )r   r   r   r¦   )r2   rá  r[  r  r&  rš   rg  rr  )r8   rÄ  rÒ  r(  r   r   r   Útest_signature_bind_vararg_name[  s    


z1TestSignatureBind.test_signature_bind_vararg_namec             C   sN   dd„ }|j jd }t |i ¡}ttdƒƒ}|  |  ||¡dddddh¡ d S )	Nc               S   s   dd„ t dƒD ƒS )Nc             S   s   h | ]}|| ’qS r   r   )rã   r   r   r   r   ú	<setcomp>q  s    zWTestSignatureBind.test_signature_bind_implicit_arg.<locals>.make_set.<locals>.<setcomp>rŽ   )r   r   r   r   r   Úmake_setp  s    zDTestSignatureBind.test_signature_bind_implicit_arg.<locals>.make_setr   rŽ   r   r®  r    r¨   )r   Ú	co_constsr[   ÚFunctionTypeÚiterr   rš   rg  )r8   r|  Zsetcomp_codeZsetcomp_funcÚiteratorr   r   r   Ú test_signature_bind_implicit_argm  s
    z2TestSignatureBind.test_signature_bind_implicit_argN)r/   r>   r?   rê  rg  rh  ri  rj  rk  rl  rm  rn  rp  rt  rx  ry  rz  r   r  r   r   r   r   rf    s   7
rf  c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestBoundArgumentsc          	   C   s<   dd„ }t  |¡ d¡}|  td¡ t|ƒ W d Q R X d S )Nc             S   s   d S )Nr   )r   r   r   r   r   {  rn   zITestBoundArguments.test_signature_bound_arguments_unhashable.<locals>.foor   zunhashable type)r2   rá  r&  r[  r  rI  )r8   r   r(  r   r   r   Ú)test_signature_bound_arguments_unhashablez  s    z<TestBoundArguments.test_signature_bound_arguments_unhashablec       	      C   sT  dd„ }t  |¡ d¡}|  ||k¡ |  ||k¡ |  |tƒ k¡ |  |tƒ k¡ t  |¡ d¡}|  ||k¡ |  ||k¡ t  |¡ d¡}|  ||k¡ |  ||k¡ d|jd< |  ||k¡ |  ||k¡ dd„ }t  |¡ d¡}|  ||k¡ |  ||k¡ dd„ }t  |¡}|jddd	}|jddd
}|  ||k¡ |  ||k¡ d S )Nc             S   s   d S )Nr   )r   r   r   r   r   ‚  rn   zGTestBoundArguments.test_signature_bound_arguments_equality.<locals>.foor   r   r   c             S   s   d S )Nr   )r~   r   r   r   r   ”  rn   zGTestBoundArguments.test_signature_bound_arguments_equality.<locals>.barc             S   s   d S )Nr   )r   r~   r   r   r   r   ™  rn   )r   r~   )r~   r   )r2   rá  r&  r.   r7   rP   rr  )	r8   r   r(  Zba2Zba3r   Zba4rÒ  Zba1r   r   r   Ú'test_signature_bound_arguments_equality  s2    

z:TestBoundArguments.test_signature_bound_arguments_equalityc          
   C   s†   i dœdddidœdd„}t  |¡}|jdd	i d
}xLttjd ƒD ]:}| j|d$ t t ||¡¡}|  	||¡ W d Q R X qDW d S )N)r   r   r   r¸  )r   rÊ  c            [   s   d S )Nr   )r   r~   r   rÑ  r   r   r   r   ¡  rn   zETestBoundArguments.test_signature_bound_arguments_pickle.<locals>.foor"  rF  )r   )rÞ  )
r2   rá  r&  r   rà  rá  râ  rã  rä  rš   )r8   r   rÒ  r(  rç  Z
ba_pickledr   r   r   Ú%test_signature_bound_arguments_pickle   s    
z8TestBoundArguments.test_signature_bound_arguments_picklec             C   sH   i dœdddidœdd„}t  |¡}|jdd	i d
}|  t|ƒd¡ d S )N)r   r   r   r¸  )r   rÊ  c            [   s   d S )Nr   )r   r~   r   rÑ  r   r   r   r   «  rn   zCTestBoundArguments.test_signature_bound_arguments_repr.<locals>.foor"  rF  )r   z <BoundArguments \(a=20,.*\}\}\)>)r2   rá  r&  ÚassertRegexr¯  )r8   r   rÒ  r(  r   r   r   Ú#test_signature_bound_arguments_reprª  s    
z6TestBoundArguments.test_signature_bound_arguments_reprc          
   C   sT  di dœddœdd„}t  |¡}| d¡}| ¡  |  t|j ¡ ƒdddd	i fd
i fg¡ |jddddd}| ¡  |  t|j ¡ ƒdddd	i fd
ddifg¡ dd„ }t  |¡}| d¡}| ¡  |  t|j ¡ ƒdg¡ dd„ }t  |¡}| ¡ }| ¡  |  t|j ¡ ƒg ¡ ddd„}t  |¡}| ¡ }| ¡  |  t|j ¡ ƒdg¡ d S )Nr   )r   c            _   s   d S )Nr   )r   r~   r   r   rÑ  r   r   r   r   ±  rn   zMTestBoundArguments.test_signature_bound_arguments_apply_defaults.<locals>.foor"  )r   r"  )r~   r   )r   r   r   rÑ  r:  rF  )rÆ   )r   r:  )r~   r"  )r   )rF  rÆ   c             S   s   d S )Nr   )r   r~   r   r   r   r   Ä  rn   c               S   s   d S )Nr   r   r   r   r   r   Í  rn   rM   c             S   s   d S )Nr   )r   r   r   r   r   Ô  rn   )r   rM   )r   )rM   )	r2   rá  r&  Úapply_defaultsrš   r{   rr  rs  Úbind_partial)r8   r   rÒ  r(  r   r   r   Ú-test_signature_bound_arguments_apply_defaults°  s:    






z@TestBoundArguments.test_signature_bound_arguments_apply_defaultsN)r/   r>   r?   rƒ  r„  r…  r‡  rŠ  r   r   r   r   r‚  y  s
   
r‚  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestSignaturePrivateHelpersc             C   s:   t j}|  |dƒd¡ |  |dƒd¡ |  |dƒd¡ d S )Nz($self)r8   z($self, obj)z($cls, /, obj)r“   )r2   Ú_signature_get_bound_paramrš   )r8   Úgetterr   r   r   Útest_signature_get_bound_paramÜ  s    z:TestSignaturePrivateHelpers.test_signature_get_bound_paramc             C   s8   t  |¡\}}}|  ||¡ |  ||¡ |  ||¡ d S )N)r2   Ú"_signature_strip_non_python_syntaxrš   )r8   ÚinputÚclean_signatureÚself_parameterÚlast_positional_onlyZcomputed_clean_signatureZcomputed_self_parameterZcomputed_last_positional_onlyr   r   r   Ú_strip_non_python_syntaxã  s    z4TestSignaturePrivateHelpers._strip_non_python_syntaxc             C   st   |   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 S )NzZ($module, /, path, mode, *, dir_fd=None, effective_ids=False,
       follow_symlinks=True)zO(module, path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)r   z($module, word, salt, /)z(module, word, salt)r   z(x, y=None, z=None, /)z(x, y=None, z=None)z!(x,
    y=None,
      z = None  )rÖ   )r”  )r8   r   r   r   Ú&test_signature_strip_non_python_syntaxí  sF    zBTestSignaturePrivateHelpers.test_signature_strip_non_python_syntaxN)r/   r>   r?   rŽ  r”  r•  r   r   r   r   r‹  Û  s   
r‹  c               @   s$   e Zd Zee ed¡dd„ ƒƒZdS )ÚTestSignatureDefinitionsz6Signature information for builtins requires docstringsc       
   
   C   s
  t ƒ }dddddddh}||O }dh}||O }d	d
dddh}||O }ddh}||O }t ƒ }ttƒ}xpt| ¡ ƒD ]`\}}	t|	ƒs‚qpt|	tƒrž||krž| |¡ ||kr¨qp| j	|d |  
t |	¡¡ W d Q R X qpW x0|D ](}| j	|d |  |	j¡ W d Q R X qÚW d S )Nr   Úslicerô  rö  r¦  r  ÚvarsÚroundÚ
breakpointr  Úmaxr"  Ú__build_class__rÎ   Ú
__import__)rÛ  )r1   r˜  rû   rß  rs  Úcallabler÷  r]   r3  râ  ÚassertIsNotNoner2   rá  rø   Ú__text_signature__)
r8   Zno_signatureZneeds_groupsZneeds_semantic_updateZneeds_varargsZnot_converted_yetZtypes_with_signaturesr)  r!  r;   r   r   r   Útest_builtins_have_signatures  s2    


z6TestSignatureDefinitions.test_builtins_have_signaturesN)r/   r>   r?   r   r¡   r-  r   r¡  r   r   r   r   r–    s   r–  c               @   s    e Zd Zdd„ Zedd„ ƒZdS )ÚNTimesUnwrappablec             C   s   || _ d | _d S )N)rü  Ú_next)r8   rü  r   r   r   r£   T  s    zNTimesUnwrappable.__init__c             C   s2   | j dkrtdƒ‚| jd kr,t| j d ƒ| _| jS )Nr   zUnwrapped too many timesr   )rü  r  r£  r¢  )r8   r   r   r   r3  X  s
    

zNTimesUnwrappable.__wrapped__N)r/   r>   r?   r£   r  r3  r   r   r   r   r¢  S  s   r¢  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S )Ú
TestUnwrapc             C   s.   dd„ }t jdd|ƒ}|  t |¡|¡ d S )Nc             S   s   | | S )Nr   )r   r~   r   r   r   r5  c  s    z(TestUnwrap.test_unwrap_one.<locals>.funcr"  )rÿ  )r»  Ú	lru_cacher°   r2   Úunwrap)r8   r5  r  r   r   r   Útest_unwrap_oneb  s    zTestUnwrap.test_unwrap_onec             C   sT   dd„ }|}x"t dƒD ]}t |¡dd„ ƒ}qW |  |j|¡ |  t |¡|¡ d S )Nc             S   s   | | S )Nr   )r   r~   r   r   r   r5  i  s    z,TestUnwrap.test_unwrap_several.<locals>.funcr:  c               S   s   d S )Nr   r   r   r   r   r  m  s    z/TestUnwrap.test_unwrap_several.<locals>.wrapper)r   r»  r¼  r™  r3  r°   r2   r¦  )r8   r5  r  Ú__r   r   r   Útest_unwrap_severalh  s    zTestUnwrap.test_unwrap_severalc             C   sT   dd„ }t  |¡dd„ ƒ}t  |¡dd„ ƒ}d|_tj|dd	„ d
}|  ||¡ d S )Nc             S   s   | | S )Nr   )r   r~   r   r   r   Úfunc1t  s    z#TestUnwrap.test_stop.<locals>.func1c               S   s   d S )Nr   r   r   r   r   Úfunc2v  s    z#TestUnwrap.test_stop.<locals>.func2c               S   s   d S )Nr   r   r   r   r   r  y  s    z%TestUnwrap.test_stop.<locals>.wrapperr   c             S   s
   t | dƒS )NÚ	stop_here)rZ   )rÈ   r   r   r   rr   ~  rn   z&TestUnwrap.test_stop.<locals>.<lambda>)Ústop)r»  r¼  r¬  r2   r¦  r°   )r8   rª  r«  r  Z	unwrappedr   r   r   Ú	test_stops  s    zTestUnwrap.test_stopc          	   C   sŒ   dd„ }||_ |  td¡ t |¡ W d Q R X dd„ }||_ ||_ |  td¡ t |¡ W d Q R X |  td¡ t |¡ W d Q R X d S )Nc               S   s   d S )Nr   r   r   r   r   rª  ‚  rn   z$TestUnwrap.test_cycle.<locals>.func1zwrapper loopc               S   s   d S )Nr   r   r   r   r   r«  ‡  rn   z$TestUnwrap.test_cycle.<locals>.func2)r3  r[  r¯  r2   r¦  )r8   rª  r«  r   r   r   Ú
test_cycle  s    zTestUnwrap.test_cyclec                s6   dd„ ‰ d ˆ _ G ‡ fdd„dƒ}|  t |ƒ ¡¡ d S )Nc               S   s   d S )Nr   r   r   r   r   r5    rn   z(TestUnwrap.test_unhashable.<locals>.funcc                   s   e Zd ZdZ” ZdS )z%TestUnwrap.test_unhashable.<locals>.CN)r/   r>   r?   Ú__hash__r3  r   )r5  r   r   r€   ’  s   r€   )r3  rø   r2   r¦  )r8   r€   r   )r5  r   Útest_unhashable  s    zTestUnwrap.test_unhashablec          	   C   s6   t t ¡ d ƒ}|  td¡ t |¡ W d Q R X d S )Nr   zwrapper loop)r¢  rX   Úgetrecursionlimitr[  r¯  r2   r¦  )r8   r;   r   r   r   Útest_recursion_limit—  s    zTestUnwrap.test_recursion_limitN)	r/   r>   r?   r§  r©  r®  r¯  r±  r³  r   r   r   r   r¤  `  s   r¤  c               @   sD   e Zd Zdd„ Zdd„ Ze edkd¡dd„ ƒZd	d
„ Z	dd„ Z
dS )ÚTestMainc             C   sV   t  d¡}tdddƒ\}}}| ¡  ¡ }|  |d d… t |¡ ¡ ¡ |  |d¡ d S )Nr¡   z-mr2   r   rn   )Ú	importlibÚimport_moduler	   Údecoder%  rš   r2   rÜ   )r8   ÚmoduleÚrcr*   ÚerrrÚ   r   r   r   Útest_only_source  s    
zTestMain.test_only_sourcec          	   C   s2   dd„ }d|_ |  t¡ t |¡ W d Q R X d S )Nc               S   s   d S )Nr   r   r   r   r   r   §  s    z)TestMain.test_custom_getattr.<locals>.foor   )rÈ  r  r  r2   rá  )r8   r   r   r   r   Útest_custom_getattr¦  s    zTestMain.test_custom_getattrNz6threads required to test __qualname__ for source filesc             C   sL   t dddƒ\}}}| ¡  ¡ }|  |d d… t t¡ ¡ ¡ |  |d¡ d S )Nz-mr2   z%concurrent.futures:ThreadPoolExecutorr   rn   )r	   r·  r%  rš   r2   rÜ   r   )r8   r¹  r*   rº  rÚ   r   r   r   Útest_qualname_source­  s    zTestMain.test_qualname_sourcec             C   s:   t  d¡}tdddƒ\}}}| ¡  ¡ }|  |dg¡ d S )Nr¡   z-mr2   rX   z#Can't get info for builtin modules.)rµ  r¶  r
   r·  r%  rš   )r8   r¸  rs  r*   rº  rÚ   r   r   r   Útest_builtins¸  s
    
zTestMain.test_builtinsc             C   sf   t  d¡}t ¡ }t|džŽ \}}}| ¡ }|  |j|¡ |  |j|¡ |  |j	|¡ |  
|d¡ d S )Nr¡   ú-mr2   ú	--detailsrn   )r¿  r2   r¡   rÀ  )rµ  r¶  r   Ú!optim_args_from_interpreter_flagsr	   r·  r„   r/   r´   Ú
__cached__rš   )r8   r¸  r   r¹  r*   rº  Úoutputr   r   r   Útest_details¿  s    
zTestMain.test_details)r/   r>   r?   r»  r¼  r¡   r-  r   r½  r¾  rÄ  r   r   r   r   r´  œ  s   	

r´  c               @   s0   e Zd Ze d¡Ze d¡Zdd„ Zdd„ ZdS )Ú
TestReloadz def foo():
    print("Bla")
    z#def foo():
    print("Oh no!")
    c          	   C   s>   t  |¡}t|ƒ"}|  | ¡  d¡| d¡¡ W d Q R X d S )NT)r2   rÜ   rÎ   rš   rÑ   r%  )r8   r€  rÒ   Zinspected_srcÚsrcr   r   r   ÚassertInspectEqualØ  s
    

zTestReload.assertInspectEqualc          
   C   sd   t d| jƒN\}}t |¡}|  ||¡ t|dƒ}| | j¡ W d Q R X |  ||¡ W d Q R X d S )NZ
reload_bugr|  )r   Ú
src_beforerµ  r¶  rÇ  rÎ   r‚  Ú	src_after)r8   r!  r€  r¸  rÆ  r   r   r   Útest_getsource_reloadà  s    
z TestReload.test_getsource_reloadN)	r/   r>   r?   ÚtextwrapÚdedentrÈ  rÉ  rÇ  rÊ  r   r   r   r   rÅ  Ì  s   rÅ  c               C   s<   t ttttttttt	t
tttttttttttttttƒ d S )N)r   r5  rÞ   rB  rW  r   r“  rR   rG  rc  rh  rj  rž  r{  rÉ  rf  rZ  r‚  r‹  r–  r!  r¤  r´  rÅ  r»  r0  r   r   r   r   Ú	test_mainê  s    rÍ  Ú__main__)arû   rå  re   r»  rµ  r2   rÔ  r  r~  Úos.pathr   rÑ  rà  r…  rX   r[   rË  rl  r¡   Zunittest.mockra   Zconcurrent.futuresr   ÚImportErrorZtest.supportr   r   r   r   r   Ztest.support.script_helperr	   r
   rÄ  r   rU   r   r7  r   Ztest.test_importr   r´   r¯   rz  r   râ   r¤   r(   r+   r×   rà  r¢   r,   rJ   rL   rN   r½  rO   rP   rR   r   rÍ   rÞ   r0  r5  rB  rW  r{  r|   r‹  r  r’  r“  r#  r!  rG  rc  rh  rj  rž  r»  rÇ  rÇ  rÅ  rÈ  rÉ  rZ  rf  r‚  r‹  r–  r¢  r¤  r´  rÅ  rÍ  r/   r   r   r   r   Ú<module>   sÆ   
 7 2
*:   Az I  c@        d  {b?9<0
