a
    äzep ã                   @   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zd dlmZ W n eyÊ   dZY n0 d dl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¡rNe*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e4ƒZ:G d d!„ d!e4ƒZ;G d"d#„ d#ej3ƒZ<G d$d%„ d%ƒ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„ d3e<ƒZDG d4d5„ d5eEƒZFG d6d7„ d7eEƒZGd8d9„ ZHG d:d;„ d;ej3ƒZIG d<d=„ d=ej3ƒZJeEƒ ZKG d>d?„ d?ej3ƒZLG d@dA„ dAej3ƒZMG dBdC„ dCeMƒZNG dDdE„ dEeNƒZOG dFdG„ dGej3ƒZPG dHdI„ dIej3ƒZQG dJdK„ dKej3ƒZRG dLdM„ dMejSƒZTG dNdO„ dOejUƒZVG dPdQ„ dQej3ƒZWG dRdS„ dSej3ƒZXG dTdU„ dUej3ƒZYG dVdW„ dWej3ƒZZG dXdY„ dYej3ƒZ[G dZd[„ d[ej3ƒZ\G d\d]„ d]ƒZ]G d^d_„ d_ej3ƒZ^G d`da„ daej3ƒZ_G dbdc„ dcej3ƒZ`eaddkre b¡  dS )eé    N©Únormcase)ÚThreadPoolExecutor)ÚTESTFNÚDirsOnSysPathÚcpython_only)ÚMISSING_C_DOCSTRINGSÚ	ALWAYS_EQ)Úassert_python_okÚassert_python_failure)Úinspect_fodder)Úinspect_fodder2)Úsupport)Ú_ready_to_import)ÚcÚoéÿÿÿÿc                 G   s   t | ƒf| S ©Nr   )ÚfilenameÚargs© r   ú'/usr/lib/python3.9/test/test_inspect.pyÚrevise7   s    r   c                  c   s„   g d¢} t ddt| ƒ ƒD ]d}g }d}t t| ƒƒD ]}|||> @ r2| | | ¡ q2dd |¡ d }i }t|||ƒ |d V  q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   Z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 r   r   )Ú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 ¡ | jt|gƒ D ]H}|tjksT|tjksT|tjkr`|tj	kr`q2|  
||ƒd|j|f ¡ q2d 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)r0   Ú
__module__Ú__qualname__r2   r3   Ú	isbuiltinÚisclassÚiscodeÚisframer7   ÚismethodÚismoduleÚistracebackÚisgeneratorr4   Úiscoroutiner6   Ú
isasyncgenr5   r1   r>   r   r   r   r   r-   U   s   ûr-   c                 c   s   t dƒD ]
}|V  qd S ©Nr   ©r   ©r9   r%   r   r   r   Úgenerator_function_examplei   s    rN   c                 C  s"   t dƒ2 z3 d H W }|V  q6 d S rK   rL   rM   r   r   r   Ú async_generator_function_examplem   s    rO   c                 Ã   s   dS ©NÚspamr   ©r9   r   r   r   Úcoroutine_function_exampleq   s    rS   c                 c   s
   d V  dS rP   r   rR   r   r   r   Úgen_coroutine_function_examplet   s    rT   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¡ zŽzdd  W nx ty° } z`|ja|   tjd¡ |   tjd¡ t	t
dƒr„|   tjd	¡ n|  t ttjƒj¡¡ W Y d }~n
d }~0 0 W d and a0 |   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jd¡ t ¡ 6 t d¡ |   tjd¡ |   tjd¡ W d   ƒ n1 s’0    Y  t	t
dƒr¸|   tjd¡ n|  t tjj ¡¡ d S )Nzsys.exitz	[].appendzmod.spam.__code__r   r   ztb.tb_frameÚtbÚGetSetDescriptorTypeztype(tb.tb_frame).f_localszmod.spamzmod.StupidGit.abusez	git.arguezmod.custom_methodÚmodz'collections.defaultdict.default_factoryz(x for x in range(2))rN   z#async_generator_function_example(1)rO   Úignorezcoroutine_function_example(1)rS   ÚMemberDescriptorTypezdatetime.timedelta.days)!r>   r3   rA   rC   Ú	ExceptionÚ__traceback__rV   rD   rG   ÚhasattrÚtypesZisgetsetdescriptorr8   ÚtypeÚtb_frameÚf_localsr7   rE   rF   ÚisdatadescriptorrH   r4   rJ   r5   ÚwarningsÚcatch_warningsÚsimplefilterrI   r6   ZismemberdescriptorÚdatetimeZ	timedeltaZdays©r9   Úer   r   r   Útest_excluding_predicates{   sH    
ÿ0ÿÿ

.z(TestPredicates.test_excluding_predicatesc              	   C   sX  t dƒ}tdƒ}tdƒ}|  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 t¡¡¡¡ |  t |¡¡ |  	t t ¡¡ |  	t t t t ¡¡¡¡ |  	t |¡¡ | ¡  | ¡  d S ©Nr   )rO   rT   rS   r8   r3   r6   Ú	functoolsÚpartialrI   r/   r4   rH   r5   rJ   Úclose)r9   Zasync_gen_coroÚgen_coroÚcoror   r   r   Útest_iscoroutine¥   sv    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ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 r   r   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 r   r   r   r   r   r   Ú	__await__ß   s    z9TestPredicates.test_isawaitable.<locals>.Future.__await__N)r0   r?   r@   rs   r   r   r   r   ÚFutureÞ   s   rt   c                   @   s   e Zd ZdS )z2TestPredicates.test_isawaitable.<locals>.NotFutureN©r0   r?   r@   r   r   r   r   Ú	NotFutureä   rr   rv   c                   S   s   d S r   r   r   r   r   r   Ú<lambda>æ   rr   z1TestPredicates.test_isawaitable.<locals>.<lambda>)r8   r3   ZisawaitablerS   rT   r/   rs   rm   )r9   rq   ro   rn   rt   rv   Znot_futr   r   r   Útest_isawaitableÔ   s    
zTestPredicates.test_isawaitablec                 C   s(   |   t tj¡¡ |   t g j¡¡ d S r   )r/   r3   Z	isroutinerX   rQ   ÚcountrR   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 r   r   )r9   Úattrr   r   r   Ú__getattr__ô   s    z>TestPredicates.test_isclass.<locals>.CustomGetattr.__getattr__N)r0   r?   r@   r|   r   r   r   r   ÚCustomGetattró   s   r}   )r>   r3   rB   r/   ÚlistÚobjectr8   )r9   r}   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©r0   r?   r@   Ú	__slots__r   r   r   r   ÚCù   s   r…   é*   r   r‚   )r   r   Údictr3   Ú
getmembersÚassertInÚassertNotIn)r9   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 r   r   rR   r   r   r   r     s    z@TestPredicates.test_isabstract.<locals>.AbstractClassExample.fooN©r0   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 r   r   rR   r   r   r   r     s    z8TestPredicates.test_isabstract.<locals>.ClassExample.fooNr‘   r   r   r   r   ÚClassExample
  s   r–   é   )Úabcr   r   r/   r3   Ú
isabstractr8   Úint)r9   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|ƒ}|  ˆg d¢¡ d S )Nr   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 r   )r!   r3   r™   ©Úcls©Úisabstract_checksr   r   Ú__init_subclass__  s    z^TestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractChecker.__init_subclass__N)r0   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 r   r   rR   r   r   r   r     s    zUTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractClassExample.fooNr‘   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 r   r   rR   r   r   r   r   "  s    zMTestPredicates.test_isabstract_during_init_subclass.<locals>.ClassExample.fooNr‘   r   r   r   r   r–   !  s   r–   TFc                   @   s   e Zd ZdS )zJTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractChildNru   r   r   r   r   ÚAbstractChild'  s   r¢   c                   @   s   e Zd ZdS )zOTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractGrandchildNru   r   r   r   r   ÚAbstractGrandchild)  s   r£   c                   @   s   e Zd ZdS )zOTestPredicates.test_isabstract_during_init_subclass.<locals>.ConcreteGrandchildNru   r   r   r   r   ÚConcreteGrandchild+  s   r¤   )TTF)r˜   r   r   ÚassertEqualÚclear)r9   r   r¡   r“   r–   r¢   r£   r¤   r   )r   rŸ   r   Ú$test_isabstract_during_init_subclass  s    z3TestPredicates.test_isabstract_during_init_subclassN)r0   r?   r@   ri   rp   rx   rz   r€   r   r›   r§   r   r   r   r   rU   y   s   */		rU   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| g|¢R i |¤Ž t ddd¡ d S )Né   é   é	   )ÚunittestÚTestCaseÚ__init__ÚgitÚabuse©r9   r   Úkwargsr   r   r   r®   1  s    zTestInterpreterStack.__init__c                 C   s    |   tjd¡ |   tjd¡ d S )Nz	git.ex[2]zmod.fr)r>   r3   rG   rD   rR   r   r   r   Útest_abuse_done6  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«   rQ   ú    eggs(b + d, c + f)
r   é+   Úargueú            spam(a, b, c)
é   é'   r°   z        self.argue(a, b, c)
zinspect.stack())r/   r    rX   Ústr¥   r   ÚmodfileÚassertIsÚframeÚfrÚlinenor   Ú__file__Úfunctionr‰   Úcode_contextÚindex)r9   Ú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¸   r¹   r«   rQ   r¶   r   é   rµ   z    q = y / 0
)r¥   r    r¯   Útrr   r½   rR   r   r   r   Ú
test_traceM  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))r3   ÚgetargvaluesrX   rÀ   r¥   Úformatargvalues©r9   r   ÚvarargsÚvarkwÚlocalsr   r   r   Ú
test_frameV  s    ÿzTestInterpreterStack.test_framec                 C   sZ   t  tjj¡\}}}}|  |g d¢¡ |  |d¡ |  |d¡ |  t  ||||¡d¡ d S )N©r   r‚   r   Údrh   ÚfÚgÚhz-(a=7, b=8, c=9, d=3, e=4, f=5, *g=(), **h={}))r3   rÎ   rX   rÀ   Úf_backr¥   rÏ   rÐ   r   r   r   Útest_previous_frame_  s    ÿz(TestInterpreterStack.test_previous_frameN)	r0   r?   r@   r®   r³   rÇ   rÊ   rÔ   rÛ   r   r   r   r   r¨   0  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   ƒ n1 s00    Y  d S r   )Úopenr3   ÚgetsourcefileÚfodderModuleÚreadÚsource)r9   Úfpr   r   r   ÚsetUpk  s    zGetSourceBase.setUpc                 C   s.   | j  d¡}d ||d |… ¡|r(dnd S )NÚ
r   Ú )rá   Úsplitr"   )r9   ÚtopÚbottomÚlinesr   r   r   Úsourcerangeo  s    zGetSourceBase.sourcerangec                 C   s   |   t |¡|  ||¡¡ d S r   )r¥   r3   Ú	getsourcerê   )r9   r<   rç   rè   r   r   r   ÚassertSourceEquals  s    
ÿzGetSourceBase.assertSourceEqual)r0   r?   r@   rß   rã   rê   rì   r   r   r   r   rÜ   g  s   rÜ   c                   @   s   e Zd ZdZdddœZdS )ÚSlotUserzDocstrings for __slots__úmeasured in kilowattsúmeasured in kilometers)ÚpowerÚdistanceN)r0   r?   r@   Ú__doc__r„   r   r   r   r   rí   w  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&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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tj	tff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tj	tffgg¡ d S )NÚFesteringGobÚMalodorousPervertÚParrotDroppingsÚ	StupidGitZTitÚWhichCommentsc                 S   s   g | ]}|d  ‘qS ©r   r   ©Ú.0r   r   r   r   Ú
<listcomp>‰  rr   z<TestRetrievingSourceCode.test_getclasses.<locals>.<listcomp>r   c                 S   s   g | ]}|d  ‘qS rù   r   rú   r   r   r   rü   ™  rr   T)r3   rˆ   rX   rB   r¥   rô   rõ   rö   r÷   rø   Zgetclasstreer   )r9   ÚclassesZtreer   r   r   Útest_getclasses  sR    ûÿ
ÿ
ÿÿ
öÿÿ

ÿÿ
ùÿÿ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µ   ÚlobbestrQ   )r3   rˆ   rX   r7   r¥   rµ   rÿ   rQ   )r9   Z	functionsr   r   r   Útest_getfunctions§  s
    þz*TestRetrievingSourceCode.test_getfunctionsr   z)Docstrings are omitted with -O2 and abovec                 C   sf   |   t t¡d¡ |   t tj¡d¡ |   t tj¡d¡ |   t tj¡d¡ |   t tj	¡d¡ d S )NzA module docstring.úA longer,

indented

docstring.ú$Another

docstring

containing

tabsrî   rï   )
r¥   r3   ÚgetdocrX   r÷   r¯   r°   rí   rð   rñ   rR   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 )Nr  r  zThe automatic gainsaying.)r¥   r3   r  rX   rô   r°   ZcontradictionrR   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 r   )r3   Z_finddocr¥   rš   rò   Úto_bytesÚ
from_bytesÚreal)r9   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¥   r3   ZcleandocrR   r   r   r   Útest_cleandocÏ  s    ÿz&TestRetrievingSourceCode.test_cleandocc                 C   sj   |   t t¡d¡ |   t tj¡d¡ |   t tj¡d¡ tdddƒ}|  t |¡¡ |  t t	¡¡ d S )Nú	# line 1
z
# line 20
z# line 159
úx=1z_non_existing_filename.pyr#   )
r¥   r3   ZgetcommentsrX   r÷   Úmod2Úcls160ÚcompileÚassertIsNoner~   )r9   Ú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¥   r3   Ú	getmodulerX   r÷   r°   ÚstrÚsysÚmodulesr½   rR   r   r   r   Útest_getmoduleÝ  s    z'TestRetrievingSourceCode.test_getmodulec                 C   s\   dd„ }t j d|¡2 t ¡ }|  t |¡¡ t |¡ W d   ƒ n1 sN0    Y  d S )Nc                 S   s   t dƒ‚d S )Nzbad file)ÚFileNotFoundError)r<   Z	_filenamer   r   r   Ú_getabsfileí  s    zKTestRetrievingSourceCode.test_getmodule_file_not_found.<locals>._getabsfilezinspect.getabsfile)r¬   ÚmockÚpatchr3   Úcurrentframer  r  Zgetouterframes)r9   r  r×   r   r   r   Útest_getmodule_file_not_foundë  s
    z6TestRetrievingSourceCode.test_getmodule_file_not_foundc                 C   s8   t  | jjd¡}|  |jd d¡ |  |jd d¡ d S )Né2   r   r  r   z'A module docstring.'
)r3   Zgetframeinforß   rÀ   r¥   rÄ   )r9   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°   rX   r÷   rÿ   rR   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 tj|j
= ntj|j
= 0 d S )Nz2_non_existing_filename_used_for_sourcefile_test.pyr  r#   r   ÚNone)r¥   r   r3   rÞ   rX   rQ   r½   r¯   r°   r  Úco_filenameÚ	linecacheÚcache)r9   Úfnr  r   r   r   Útest_getsourcefileþ  s    z+TestRetrievingSourceCode.test_getsourcefilec                 C   s   |   t tj¡tj¡ d S r   )r¥   r3   ÚgetfilerX   r÷   rÂ   rR   r   r   r   Útest_getfile
  s    z%TestRetrievingSourceCode.test_getfilec                 C   sN   |   t¡}t t¡ W d   ƒ n1 s*0    Y  |  t|jƒ d¡¡ d S )Nz<module)	ÚassertRaisesÚ	TypeErrorr3   r-  r  r/   r  Ú	exceptionÚ
startswithrg   r   r   r   Útest_getfile_builtin_module  s    (z4TestRetrievingSourceCode.test_getfile_builtin_modulec                 C   sN   |   t¡}t t¡ W d   ƒ n1 s*0    Y  |  t|jƒ d¡¡ d S )Nz<class)	r/  r0  r3   r-  rš   r/   r  r1  r2  rg   r   r   r   Útest_getfile_builtin_class  s    (z3TestRetrievingSourceCode.test_getfile_builtin_classc                 C   s’   |   t¡}t t¡ W d   ƒ n1 s*0    Y  |  dt|jƒ¡ |   t¡}t tj	¡ W d   ƒ n1 sr0    Y  |  dt|jƒ¡ d S )Nzexpected, got)
r/  r0  r3   r-  Úabsr‰   r  r1  r~   r!   )r9   Ze_absZe_appendr   r   r   Ú'test_getfile_builtin_function_or_method  s    (*z@TestRetrievingSourceCode.test_getfile_builtin_function_or_methodc                 C   sZ   G dd„ dt ƒ}G dd„ d|d}|  t¡ t |¡ W d   ƒ n1 sL0    Y  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 r   ©ÚAttributeErrorrœ   r   r   r   r?   !  s    zQTestRetrievingSourceCode.test_getfile_class_without_module.<locals>.CM.__module__N)r0   r?   r@   Úpropertyr   r   r   r   ÚCM   s   r:  c                   @   s   e Zd ZdS )zETestRetrievingSourceCode.test_getfile_class_without_module.<locals>.CNru   r   r   r   r   r…   $  s   r…   r”   )r_   r/  r0  r3   r-  )r9   r:  r…   r   r   r   Ú!test_getfile_class_without_module  s    z:TestRetrievingSourceCode.test_getfile_class_without_modulec                 C   sL   G dd„ dƒ}|ƒ }|   t¡ t |¡ W d   ƒ n1 s>0    Y  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)r[   rR   r   r   r   Ú__repr__+  s    zMTestRetrievingSourceCode.test_getfile_broken_repr.<locals>.ErrorRepr.__repr__N)r0   r?   r@   r<  r   r   r   r   Ú	ErrorRepr*  s   r=  )r/  r0  r3   r-  )r9   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_dummyú<string>Údummyzdef x(): passza=10rå   Úsingle)r^   r?  r  r  rÂ   Ú
__loader__r#   Ú__dict__r¥   r3   rÞ   r‹   Ú__code__r  r  )r9   r?  ÚnameÚmr   r   r   Útest_getmodule_recursion1  s    z1TestRetrievingSourceCode.test_getmodule_recursionc                    sb   d\‰ ‰t j‰d‡ ‡‡fdd„	}|t _z.i }ttˆˆ dƒ|ƒ t |d ¡ W ˆt _nˆt _0 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>.monkeyrB  r‹   )N)r)  rM  r#   r  r3   rë   )r9   rN  Únsr   rL  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ì   rX   rµ   rE  rR   r   r   r   Útest_getsource_on_code_objectM  s    z6TestRetrievingSourceCode.test_getsource_on_code_objectN) r0   r?   r@   rX   rß   rþ   r   r¬   ÚskipIfr  ÚflagsÚoptimizer  r  r   r	  r
  r  r  r  r   r&  r,  r.  r3  r4  r6  r;  r>  rH  rP  rR  r   r   r   r   ró   |  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 rj   )ZmaxDiffrì   rX   r  rR   r   r   r   Útest_range_toplevel_frameS  s    z;TestGettingSourceOfToplevelFrames.test_range_toplevel_framec                 C   s   |   tjdd ¡ d S rj   )rì   rX   rV   rR   r   r   r   Ú#test_range_traceback_toplevel_frameW  s    zETestGettingSourceOfToplevelFrames.test_range_traceback_toplevel_frameN)r0   r?   r@   rX   rß   rW  rX  r   r   r   r   rV  P  s   rV  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ì   r  ÚwrappedrR   r   r   r   Útest_wrapped_decorator]  s    z%TestDecorators.test_wrapped_decoratorc                 C   s   |   tjdd¡ d S )Nr«   é
   )rì   r  ZgonerR   r   r   r   Útest_replacing_decorator`  s    z'TestDecorators.test_replacing_decoratorc                 C   s   |   tjdd¡ d S )Né‚   é„   )rì   r  r  rR   r   r   r   Útest_getsource_unwrapc  s    z$TestDecorators.test_getsource_unwrapc                 C   s   |   tjdd¡ d S )Néq   és   )rì   r  Zfunc114rR   r   r   r   Útest_decorator_with_lambdaf  s    z)TestDecorators.test_decorator_with_lambdaN)	r0   r?   r@   r  rß   r\  r^  ra  rd  r   r   r   r   rY  Z  s
   rY  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ì   r  ZollrR   r   r   r   Útest_oneline_lambdak  s    z!TestOneliners.test_oneline_lambdac                 C   s   |   tjdd¡ d S )Né   é   )rì   r  ZtllrR   r   r   r   Útest_threeline_lambdao  s    z#TestOneliners.test_threeline_lambdac                 C   s   |   tjdd¡ d S )Né!   é"   )rì   r  ZtllirR   r   r   r   Útest_twoline_indented_lambdat  s    z*TestOneliners.test_twoline_indented_lambdac                 C   s   |   tjdd¡ d S )Né%   )rì   r  ZonelinefuncrR   r   r   r   Útest_onelinefuncy  s    zTestOneliners.test_onelinefuncc                 C   s   |   tjdd¡ d S )Né(   é)   )rì   r  ZmanyargsrR   r   r   r   Útest_manyargs}  s    zTestOneliners.test_manyargsc                 C   s   |   tjdd¡ d S )Né,   é-   )rì   r  ZtwolinefuncrR   r   r   r   Útest_twolinefuncƒ  s    zTestOneliners.test_twolinefuncc                 C   s   |   tjd dd¡ d S )Nr   é1   )rì   r  r   rR   r   r   r   Útest_lambda_in_list‰  s    z!TestOneliners.test_lambda_in_listc                 C   s   |   tjdd¡ d S )Né7   )rì   r  Z	anonymousrR   r   r   r   Útest_anonymousŽ  s    zTestOneliners.test_anonymousN)r0   r?   r@   r  rß   rg  rj  rm  ro  rr  ru  rw  ry  r   r   r   r   re  i  s   re  c                   @   s(   e Zd ZeZdd„ Zdd„ Zdd„ ZdS )ÚTestBlockCommentsc                 C   s   |   tjdd¡ d S )Né`   ér   )rì   rX   rø   rR   r   r   r   Útest_toplevel_class–  s    z%TestBlockComments.test_toplevel_classc                 C   s   |   tjjdd¡ d S )Néc   éh   )rì   rX   rø   r×   rR   r   r   r   Útest_class_method™  s    z#TestBlockComments.test_class_methodc                 C   s   |   tjjdd¡ d S )Ném   ép   )rì   rX   rø   ZasyncfrR   r   r   r   Útest_class_async_methodœ  s    z)TestBlockComments.test_class_async_methodN)r0   r?   r@   rX   rß   r}  r€  rƒ  r   r   r   r   rz  “  s   rz  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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 d0S )1ÚTestBuggyCasesc                 C   s   |   tjdd¡ d S )Né:   é;   )rì   r  Zwith_commentrR   r   r   r   Útest_with_comment¢  s    z TestBuggyCases.test_with_commentc                 C   s   |   tjd dd¡ d S )Nr   é?   é@   )rì   r  Zmultiline_sigrR   r   r   r   Útest_multiline_sig¥  s    z!TestBuggyCases.test_multiline_sigc                 C   s   |   t ¡ jdd¡ d S )NéG   éH   )rì   r  Zfunc69Zfunc71rR   r   r   r   Útest_nested_class¨  s    z TestBuggyCases.test_nested_classc                 C   s   |   tjdd¡ d S )NéM   )rì   r  Zfunc77rR   r   r   r   Ú#test_one_liner_followed_by_non_name«  s    z2TestBuggyCases.test_one_liner_followed_by_non_namec                 C   s   |   tjjdd¡ d S )NéS   )rì   r  Zcls82Zfunc83rR   r   r   r   Útest_one_liner_dedent_non_name®  s    z-TestBuggyCases.test_one_liner_dedent_non_namec                 C   s   |   tjdd¡ d S )NéX   éZ   )rì   r  Zfunc88rR   r   r   r   Ú&test_with_comment_instead_of_docstring±  s    z5TestBuggyCases.test_with_comment_instead_of_docstringc                 C   s   |   tjdd¡ d S )Né_   éa   )rì   r  Zmethod_in_dynamic_classrR   r   r   r   Útest_method_in_dynamic_class´  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 r   )r/  ÚOSErrorr3   rë   ÚunicodedataÚ
findsourcerR   r   r   r   Útest_findsource_binary¹  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< z:|  	t |¡|df¡ |  	t |¡|d ¡ W tj|j= ntj|j= 0 d S )Nr  r   Z_dynamically_created_filer#   r   )
r  r/  r˜  r3   rš  rë   r(  r)  r*  r¥   )r9   ré   r  r   r   r   Ú!test_findsource_code_in_linecacheÀ  s    z0TestBuggyCases.test_findsource_code_in_linecachec                 C   s:   dD ]0}t d|dƒ}|  ttj|¡ |  ttj|¡ qd S )N)rå   r@  r  r#   )r  r/  ÚIOErrorr3   rš  rë   )r9   Zfnamer  r   r   r   Ú test_findsource_without_filenameÌ  s    z/TestBuggyCases.test_findsource_without_filenamec                 C   s˜   t t t¡ƒ}d| d }t|tjdƒ}i i  }}t|||ƒ |d }|  |jj	dd|  ¡ |  
td¡ t |¡ W d   ƒ n1 sŠ0    Y  d S )Nz

zdef f(): passr#   r×   r   r   zlineno is out of bounds)r    r3   rë   rX   r  rÂ   r.   r¥   rE  Úco_firstlinenoÚassertRaisesRegexr  rš  )r9   Zmod_lenÚsrcr  rØ   ÚlÚfuncr   r   r   Ú)test_findsource_with_out_of_bounds_linenoÒ  s    
z8TestBuggyCases.test_findsource_with_out_of_bounds_linenoc                 C   s   |   tjjdd¡ d S )Név   éw   )rì   r  ZClassWithMethodÚmethodrR   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ì   r  Zcls135Zfunc136rR   r   r   r   Útest_nested_funcà  s    zTestBuggyCases.test_nested_funcc                 C   s   |   tjdd¡ d S )Né•   é˜   )rì   r  Zcls149rR   r   r   r   Ú4test_class_definition_in_multiline_string_definitionã  s    zCTestBuggyCases.test_class_definition_in_multiline_string_definitionc                 C   s   |   tjdd¡ d S )Né    é£   )rì   r  r  rR   r   r   r   Ú*test_class_definition_in_multiline_commentæ  s    z9TestBuggyCases.test_class_definition_in_multiline_commentc                 C   s   |   tjjdd¡ d S )Né¯   é°   )rì   r  Zcls173Zcls175rR   r   r   r   Ú,test_nested_class_definition_indented_stringé  s    z;TestBuggyCases.test_nested_class_definition_indented_stringc                 C   s&   |   tjdd¡ |   tjjdd¡ d S )Né·   é¼   é¹   )rì   r  Zcls183Zcls185rR   r   r   r   Útest_nested_class_definitionì  s    z+TestBuggyCases.test_nested_class_definitionc                 C   s&   |   tjdd¡ |   tjjdd¡ d S )NéÂ   éÉ   éÆ   )rì   r  Zcls196Zcls200rR   r   r   r   Útest_class_decoratorð  s    z#TestBuggyCases.test_class_decoratorc                 C   s&   |   tjdd¡ |   tjjdd¡ d S )Néî   éð   éï   )rì   r  Zcls238Zcls239rR   r   r   r   Útest_class_inside_conditionalô  s    z,TestBuggyCases.test_class_inside_conditionalc                 C   s`   |   tjdd¡ |   tjjdd¡ |   tjjjdd¡ |   tjjdd¡ |   tjjjdd¡ d S )NéË   éÑ   éÌ   éÎ   éÍ   éÏ   éÐ   )rì   r  Zcls203Zcls204Zcls205Zcls207rR   r   r   r   Útest_multiple_children_classesø  s
    z-TestBuggyCases.test_multiple_children_classesc                 C   s<   |   t ¡ dd¡ |   tjdd¡ |   t ¡  ¡ dd¡ d S )NéÕ   éÖ   éÚ   éÞ   éÜ   éÝ   )rì   r  Zfunc212Zcls213Zfunc219rR   r   r   r   Ú,test_nested_class_definition_inside_functionÿ  s    z;TestBuggyCases.test_nested_class_definition_inside_functionc                 C   s^   dd l }|  |jd ¡ |  | t ¡ ¡dd¡ |  tjdd¡ |  | t ¡  ¡ ¡dd¡ d S )Nr   éâ   éã   éç   éë   éé   éê   )	ÚasyncioZ
addCleanupZset_event_loop_policyrì   Úrunr  Zfunc225Zcls226Zfunc232)r9   rÖ  r   r   r   Ú2test_nested_class_definition_inside_async_function  s
    zATestBuggyCases.test_nested_class_definition_inside_async_functionN)!r0   r?   r@   r  rß   r‡  rŠ  r  r  r‘  r”  r—  r¬   rS  r]   r™  rÂ   Úendswithr›  rœ  rž  r¤  r¨  r«  r®  r±  r´  r¸  r¼  rÀ  rÈ  rÏ  rØ  r   r   r   r   r„  Ÿ  s6   
þ
r„  c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )Ú	TestNoEOLc                    s¢   t d | _t | j¡ ttj | jdtj ¡dƒ}| d¡ W d   ƒ n1 sR0    Y  t	| jƒ dd l
}W d   ƒ n1 s„0    Y  || _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ã   )r9   r×   Zmod3©Ú	__class__r   r   rã     s    
ÿÿ(&zTestNoEOL.setUpc                 C   s   t  | j¡ d S r   )ÚshutilÚrmtreerÜ  rR   r   r   r   ÚtearDown  s    zTestNoEOL.tearDownc                 C   s   |   | jjdd¡ d S )Nr   r   )rì   rß   ÚXrR   r   r   r   Ú
test_class  s    zTestNoEOL.test_class)r0   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 descriptorr7  ©r   r   r   r   Ú__get__"  s    z_BrokenDataDescriptor.__get__c                  G   s   t ‚d S r   )ÚRuntimeErrorrí  r   r   r   Ú__set__%  s    z_BrokenDataDescriptor.__set__c                  G   s   t dƒ‚d S rì  r7  rí  r   r   r   r|   (  s    z!_BrokenDataDescriptor.__getattr__N)r0   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S )Ú_BrokenMethodDescriptorz4
    A broken method descriptor. See bug #1785.
    c                  G   s   t dƒ‚d S ©Nzbroken method descriptorr7  rí  r   r   r   rî  0  s    z_BrokenMethodDescriptor.__get__c                  G   s   t dƒ‚d S rò  r7  rí  r   r   r   r|   3  s    z#_BrokenMethodDescriptor.__getattr__N)r0   r?   r@   rò   rî  r|   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ü   9  rr   z!attrs_wo_objs.<locals>.<listcomp>)r3   Úclassify_class_attrsrœ   r   r   r   Úattrs_wo_objs8  s    rö  c                   @   s  e Zd Zdd„ Zd5dd„Zdddg 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>.ANru   r   r   r   r   ÚA?  rr   rø  c                   @   s   e Zd ZdS )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.BNru   r   r   r   r   ÚB@  rr   rù  c                   @   s   e Zd ZdS )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.CNru   r   r   r   r   r…   A  rr   r…   c                   @   s   e Zd ZdS )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.DNru   r   r   r   r   ÚDB  rr   rú  )r   r3   Zgetmror¥   )r9   rø  rù  r…   rú  ÚexpectedZgotr   r   r   Útest_newstyle_mro=  s    
z)TestClassesAndFunctions.test_newstyle_mroNc              	   C   sº   |   t¡" t |¡\}}}	}
W d   ƒ n1 s20    Y  |  ||¡ |  ||¡ |  |	|¡ |  |
|¡ |d ur¶|   t¡( |  t |||	|
¡|¡ W d   ƒ n1 s¬0    Y  d S r   )ÚassertWarnsÚDeprecationWarningr3   Z
getargspecr¥   Úformatargspec)r9   ÚroutineÚargs_eÚ	varargs_eÚvarkw_eÚ
defaults_eÚ	formattedr   rÑ   rÒ   Údefaultsr   r   r   ÚassertArgSpecEqualsH  s    0ÿz+TestClassesAndFunctions.assertArgSpecEqualsc                 C   sÀ   t  |¡\}}}}}}}|  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||	¡ |
d ur¼|  t¡. |  t  |||||||¡|
¡ W d   ƒ n1 s²0    Y  d S r   )r3   Úgetfullargspecr¥   rý  rþ  rÿ  )r9   r   r  r  r  r  Zposonlyargs_eÚkwonlyargs_eÚkwonlydefaults_eÚann_er  r   rÑ   rÒ   r  Ú
kwonlyargsZkwonlydefaultsÚannr   r   r   ÚassertFullArgSpecEqualsU  s     ÿÿþz/TestClassesAndFunctions.assertFullArgSpecEqualsc                 C   sp   | j tjddgdd |   tjg d¢dddd	¡ |  t| j tjg ¡ |  t| j tjg ¡ |  t| j tj	g ¡ d S )
Nr‹   rË   ú(x, y)©r  rÕ   rØ   rÙ   )rº   é   r—   z!(a, b, c, d=3, e=4, f=5, *g, **h))
r  rX   rµ   rQ   r/  Ú
ValueErrorr  Ú	keywordedÚ	annotatedÚkeyword_only_argrR   r   r   r   Útest_getargspeci  s    ý
ÿ
ÿ
ÿz'TestClassesAndFunctions.test_getargspecc                 C   s´   | 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
 | j tjg d¢ddgdd
 | j tjg d¢ddddgdd | j tjg d¢dddgdddœ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   r‚   r   rÖ   rh   r×   z(a, b, c, d, *, e, f)r   r²   z#(a, b, c, d, *args, e, f, **kwargs))r  r  r	  r  ©r   r   rº   r  r—   )rh   r×   z(a, b=1, c=2, d=3, *, e=4, f=5))r  r	  r
  r  )	r  r  r  r  r~   r  Zall_markersZ all_markers_with_args_and_kwargsZall_markers_with_defaultsrR   r   r   r   Útest_getfullargspecz  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 r   r   ©r‹   rË   r   r   r   Úhamš  s    zETestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.hamr‹   rË   r  r  c                    s   ˆ j | g d¢dd d S )N©r9   r‹   rË   z(self, x, y)r  )r  ©r×   rR   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 r   r   r  r   r   r   r  §  s    zGTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C.hamc                 S   s   d S r   r   r  r   r   r   Ú__call__«  s    zLTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C.__call__N)r0   r?   r@   rk   ÚwrapsrX   rQ   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 r   r   r  r   r   r   Ú__new__µ  s    zOTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_new.__new__N)r0   r?   r@   rk   r#  rX   rQ   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 r   r   r  r   r   r   r®   »  s    zQTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_init.__init__N)r0   r?   r@   rk   r#  rX   rQ   r®   r   r   r   r   ÚC_initº  s   
r(  )	rk   r#  rX   rQ   r  r  rl   r  r%  )r9   r  r!  r…   r'  r(  r   rR   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 r   r   r   r   r   r   ÚtestÁ  s    zHTestClassesAndFunctions.test_getfullargspec_signature_attr.<locals>.testrQ   ©r$   ú(spam)r  )r3   Ú	ParameterÚPOSITIONAL_ONLYÚ	SignatureÚ__signature__r  )r9   r*  Z
spam_paramr   r   r   Ú"test_getfullargspec_signature_attrÀ  s    z:TestClassesAndFunctions.test_getfullargspec_signature_attrc                 C   sP   dddœdd„}t  |¡}|  |j|j¡ dd„ }t  |¡}|  |j|j¡ d S )NrQ   r  ©r   Úreturnc                 S   s   d S r   r   ©r   r   r   r   r*  É  rr   zITestClassesAndFunctions.test_getfullargspec_signature_annos.<locals>.testc                   S   s   d S r   r   r   r   r   r   r*  Í  rr   )r3   r  r¥   Ú__annotations__Úannotations)r9   r*  Úspecr   r   r   Ú#test_getfullargspec_signature_annosÈ  s    

z;TestClassesAndFunctions.test_getfullargspec_signature_annosú6Signature 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 )Nr9   r<   z(self, obj)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Ý  ÚstatrR   r   r   r   Ú#test_getfullargspec_builtin_methodsÑ  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_defaultsr3   r  r¥   r  )r9   rD  Úbuiltinr7  r   r   r   Ú test_getfullargspec_builtin_funcá  s    
z8TestClassesAndFunctions.test_getfullargspec_builtin_funcc                 C   sF   dd l }|j}|  t¡ t |¡ W d   ƒ n1 s80    Y  d S )Nr   )rD  Údocstring_no_signaturer/  r0  r3   r  )r9   rD  rF  r   r   r   Ú-test_getfullargspec_builtin_func_no_signatureê  s    zETestClassesAndFunctions.test_getfullargspec_builtin_func_no_signaturec                 C   sb   t ƒ D ]6}t |¡}t|jƒ}t|ƒ}|  |¡ |  ||¡ qt t¡}t|jƒ}|  |t	¡ d S r   )
r)   r3   r  r~   r  Úsortedr/   r¥   r,   Ú unsorted_keyword_only_parameters©r9   r+  Ú	signaturer¢  Zsorted_lr   r   r   Ú8test_getfullargspec_definition_order_preserved_on_kwonlyó  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 r   r   rR   r   r   r   rG     s    z;TestClassesAndFunctions.test_getargspec_method.<locals>.A.mN©r0   r?   r@   rG  r   r   r   r   rø  ÿ  s   rø  r9   )r   r  rG  ©r9   rø  r   r   r   Útest_getargspec_methodþ  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 r   r   r   r   r   r   Ús  rr   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.A.sc                 S   s   d S r   r   rœ   r   r   r   r   
  rr   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.A.cc                 S   s   d S r   r   rR   r   r   r   Úgetp  rr   z>TestClassesAndFunctions.test_classify_newstyle.<locals>.A.getpc                 S   s   d S r   r   rR   r   r   r   rG    rr   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.A.mc                 S   s   d S r   r   rR   r   r   r   Úm1  rr   z<TestClassesAndFunctions.test_classify_newstyle.<locals>.A.m1Ú1N)r0   r?   r@   rR  Ústaticmethodr   ÚclassmethodrS  r9  r&   rG  rT  Údatablobrë  Úddrñ  Úmdr   r   r   r   rø    s   rø  r&  ústatic methodúmissing __new__r®   r§  zmissing __init__rR  zmissing static methodr   úclass methodúmissing class methodr&   r9  zmissing propertyrG  zmissing plain method: %rrT  úmissing plain methodrX  Údatazmissing datarZ  zmissing method descriptorrY  zmissing data descriptorc                   @   s   e Zd Zdd„ ZdS )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Bc                 S   s   d S r   r   rR   r   r   r   rG  +  rr   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.B.mNrO  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 r   r   rR   r   r   r   rG  :  rr   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.C.mc                 S   s   d S r   r   rR   r   r   r   r   ;  rr   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.C.cN)r0   r?   r@   rG  r   r   r   r   r   r…   8  s   r…   c                   @   s   e Zd Zdd„ ZdS )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Dc                 S   s   d S r   r   rR   r   r   r   rT  I  rr   z<TestClassesAndFunctions.test_classify_newstyle.<locals>.D.m1N)r0   r?   r@   rT  r   r   r   r   rú  G  s   rú  )r   rö  r‰   )r9   rø  Úattrsrù  r…   rú  r   r   r   Útest_classify_newstyle  s\    ÿÿz.TestClassesAndFunctions.test_classify_newstylec                 C   sœ   t tƒD ]"}tt|ƒ}t|tƒrt |¡ q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&  r[  r\  r  r]  r^  r  r§  r_  Ú__add__Ú__and__)ÚdirÚ__builtins__ÚgetattrÚ
isinstancer_   r3   rõ  rö  Úboolr‰   rš   )r9   rF  rF  ra  r   r   r   Útest_classify_builtin_typesU  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  rQ   ©râ  r|   ©r9   rF  rã  r   r   r|   k  s    zUTestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.Meta.__getattr__©r0   r?   r@   r|   rê  r   r   rã  r   ÚMetaj  s   rn  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   rR   r   r   r   r  p  s    zKTestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.VA.hamN)r0   r?   r@   r^   ÚDynamicClassAttributer  r   r   r   r   ÚVAo  s   rp  r”   r  r`  rQ   )r_   r3   Ú	AttributerD  r‰   rõ  )r9   rn  rp  Zshould_find_dcaZshould_find_gar   r   r   Ú#test_classify_DynamicClassAttributei  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 r   r   )r9   r=   ©ÚNoBoolr   r   Ú__eq__z  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)ÚNotImplementedErrorrR   r   r   r   Ú__bool__}  s    ÿzMTestClassesAndFunctions.test_classify_overrides_bool.<locals>.NoBool.__bool__N)r0   r?   r@   ru  rw  r   rs  r   r   rt  y  s   rt  c                       s   e Zd Z” ƒ ZdS )zCTestClassesAndFunctions.test_classify_overrides_bool.<locals>.HasNBN)r0   r?   r@   rY  r   rs  r   r   ÚHasNB  s   rx  rY  r`  )r   r3   rq  rY  r‰   rõ  )r9   rx  Zshould_find_attrr   rs  r   Útest_classify_overrides_boolx  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   g d¢S )N)rä  r?   r0   Úfishr   rR   r   r   r   Ú__dir__Š  s    zUTestClassesAndFunctions.test_classify_metaclass_class_attribute.<locals>.Meta.__dir__N)r0   r?   r@   r{  r|  r   r   r   r   rn  ˆ  s   rn  c                   @   s   e Zd ZdS )zNTestClassesAndFunctions.test_classify_metaclass_class_attribute.<locals>.ClassNru   r   r   r   r   ÚClassŒ  s   r}  r”   r{  r`  rz  ©r_   r3   rq  r‰   rõ  ©r9   rn  r}  Z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   g d¢S )N)rä  r?   r0   Ú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__getattrrl  rã  r   r   r|   •  s    zPTestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.Meta.__getattr__©r0   r?   r@   r|  r|   rê  r   r   rã  r   rn  ’  s   rn  c                   @   s   e Zd ZdS )zETestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.ClassNru   r   r   r   r   r}  ™  s   r}  r”   r  r`  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 |¡}|||fD ]}|  ||¡ q¢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   g d¢S )N)rä  r?   r0   Ú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   rk  rl  rã  r   r   r|   ¢  s    z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta1.__getattr__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   g d¢S )N)rä  r?   r0   Ú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   rk  rl  rã  r   r   r|   ©  s    z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta2.__getattr__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g d¢ˆ  | ¡ ˆ | ¡ ƒƒƒS )N)rä  r?   r0   Úthree)r~   rJ  r2   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º   rk  rl  rã  r   r   r|   ±  s    z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta3.__getattr__r‚  r   r‰  rã  r   ÚMeta3­  s   rŠ  c                   @   s   e Zd ZdS )zTTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Class1Nru   r   r   r   r   ÚClass1µ  s   r‹  r”   c                   @   s   e Zd ZdS )zTTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Class2Nru   r   r   r   r   ÚClass2·  s   rŒ  r„  r`  r   r†  r   rˆ  rº   )r_   r3   rq  rõ  r‰   )	r9   rŠ  r‹  rŒ  Zshould_find1Zshould_find2Zshould_find3ZccaZsfr   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   g d¢S ©N)rä  r0   Úmissingr   rœ   r   r   r   r|  Ã  s    zSTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.M.__dir__N©r0   r?   r@   r|  r   r   r   r   ÚMÂ  s   r‘  c                   @   s   e Zd ZdS )zKTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.CNru   r   r   r   r   r…   Å  s   r…   r”   c                 S   s   g | ]}|d  ‘qS ©r   r   ©rû   r   r   r   r   rü   Ç  rr   zTTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.<listcomp>r  )r_   r3   rõ  rŠ   ©r9   r‘  r…   ra  r   r   r   Ú(test_classify_class_attrs_with_buggy_dirÁ  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)r0   r?   r@   rë  rY  rñ  rZ  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>.EmptyNru   r   r   r   r   ÚEmptyÒ  s   r–  c                    s$   dt | ƒv rtˆ | jƒrdS ˆ| ƒS )Nr0   F)re  r]   r0   ©r‹   ©r–  Úpredr   r   r[  Ô  s    zZTestClassesAndFunctions.test_getmembers_descriptors.<locals>.pred_wrapper.<locals>.wrapped©r   )r™  r[  r   r˜  r   Úpred_wrapperÏ  s    zITestClassesAndFunctions.test_getmembers_descriptors.<locals>.pred_wrapperrZ  rY  c                   @   s   e Zd ZdS )z>TestClassesAndFunctions.test_getmembers_descriptors.<locals>.BNru   r   r   r   r   rù  â  s   rù  )r   r3   Úismethoddescriptorrb   r¥   rˆ   rD  )r9   rø  r›  rœ  rb   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 r   r   rR   r   r   r   r×   ì  s    z;TestClassesAndFunctions.test_getmembers_method.<locals>.B.fN©r0   r?   r@   r×   r   r   r   r   rù  ë  s   rù  r×   )r‰   r×   r3   rˆ   rŠ   rE   )r9   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µ   Ú	scrambledrk  )r   rF  rã  r   r   r|   ÷  s    zOTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.M.__getattr__rm  r   r   rã  r   r‘  ö  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 rP   r   rR   r   r   r   rµ   ü  s    zHTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.A.eggsN)r0   r?   r@   r^   ro  rµ   r   r   r   r   rø  û  s   rø  r”   )rµ   r   )rµ   rQ   )r_   r‰   r3   rˆ   )r9   r‘  rø  r   r   r   Ú test_getmembers_VirtualAttributeõ  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   g d¢S rŽ  r   rœ   r   r   r   r|    s    zITestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.M.__dir__Nr  r   r   r   r   r‘    s   r‘  c                   @   s   e Zd ZdS )zATestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.CNru   r   r   r   r   r…     s   r…   r”   c                 S   s   g | ]}|d  ‘qS r’  r   r“  r   r   r   rü     rr   zJTestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.<listcomp>r  )r_   r3   rˆ   rŠ   r”  r   r   r   Útest_getmembers_with_buggy_dir  s    z6TestClassesAndFunctions.test_getmembers_with_buggy_dir)NNNN) r0   r?   r@   rü  r  r  r  r  r)  r1  r8  r¬   rS  r   rB  r   rG  rI  rN  rQ  rb  rj  rr  ry  r€  rƒ  r  r•  r  rŸ  r¡  r¢  r   r   r   r   r÷  <  sV     ÿ
ü
(	ÿ
ÿÿQ
#	 r÷  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestIsDataDescriptorc                 C   sŒ   G dd„ dƒ}G dd„ dƒ}G dd„ dƒ}G dd„ dƒ}|   t |ƒ ¡d	¡ |  t |ƒ ¡d
¡ |  t |ƒ ¡d¡ |  t |ƒ ¡d¡ d S )Nc                   @   s   e Zd Zddd„ZdS )zGTestIsDataDescriptor.test_custom_descriptors.<locals>.NonDataDescriptorNc                 S   s   d S r   r   )r9   Úvaluer_   r   r   r   rî    rr   zOTestIsDataDescriptor.test_custom_descriptors.<locals>.NonDataDescriptor.__get__)N©r0   r?   r@   rî  r   r   r   r   ÚNonDataDescriptor  s   r¦  c                   @   s   e Zd Zdd„ ZdS )zETestIsDataDescriptor.test_custom_descriptors.<locals>.DataDescriptor0c                 S   s   d S r   r   )r9   rF  r¤  r   r   r   rð    rr   zMTestIsDataDescriptor.test_custom_descriptors.<locals>.DataDescriptor0.__set__N©r0   r?   r@   rð  r   r   r   r   ÚDataDescriptor0  s   r¨  c                   @   s   e Zd Zdd„ ZdS )zETestIsDataDescriptor.test_custom_descriptors.<locals>.DataDescriptor1c                 S   s   d S r   r   rl  r   r   r   Ú
__delete__  rr   zPTestIsDataDescriptor.test_custom_descriptors.<locals>.DataDescriptor1.__delete__N)r0   r?   r@   r©  r   r   r   r   ÚDataDescriptor1  s   rª  c                   @   s   e Zd ZdZdS )zETestIsDataDescriptor.test_custom_descriptors.<locals>.DataDescriptor2Nr§  r   r   r   r   ÚDataDescriptor2  s   r«  z-class with only __get__ not a data descriptorz'class with __set__ is a data descriptorz*class with __delete__ is a data descriptorz.class with __set__ = None is a data descriptor)r8   r3   rb   r/   )r9   r¦  r¨  rª  r«  r   r   r   Útest_custom_descriptors  s     ÿÿÿÿz,TestIsDataDescriptor.test_custom_descriptorsc                 C   s&   G dd„ dƒ}|   t |j¡d¡ d S )Nc                   @   s   e Zd ZdZdS )z/TestIsDataDescriptor.test_slot.<locals>.Slotted©r   Nrƒ   r   r   r   r   ÚSlotted   s   r®  za slot is a data descriptor)r/   r3   rb   r   )r9   r®  r   r   r   Ú	test_slot  s    ÿzTestIsDataDescriptor.test_slotc                 C   s&   G dd„ dƒ}|   t |j¡d¡ d S )Nc                   @   s   e Zd Zedd„ ƒZdS )z6TestIsDataDescriptor.test_property.<locals>.Propertiedc                 S   s   d S r   r   rR   r   r   r   Ú
a_property'  s    zATestIsDataDescriptor.test_property.<locals>.Propertied.a_propertyN)r0   r?   r@   r9  r°  r   r   r   r   Ú
Propertied&  s   r±  za property is a data descriptor)r/   r3   rb   r°  )r9   r±  r   r   r   Útest_property%  s    ÿz"TestIsDataDescriptor.test_propertyc                 C   sŠ   G dd„ dt ƒ}dd„ }dd„ }|  t |ƒ j¡d¡ |  t |ƒ j¡d¡ |  t |ƒ j¡d	¡ |  t |¡d
¡ |  t |¡d¡ d S )Nc                   @   s,   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdS )z1TestIsDataDescriptor.test_functions.<locals>.Testc                 S   s   d S r   r   rR   r   r   r   Úinstance_method/  rr   zATestIsDataDescriptor.test_functions.<locals>.Test.instance_methodc                 S   s   d S r   r   rœ   r   r   r   Úclass_method0  s    z>TestIsDataDescriptor.test_functions.<locals>.Test.class_methodc                   S   s   d S r   r   r   r   r   r   Ústatic_method2  s    z?TestIsDataDescriptor.test_functions.<locals>.Test.static_methodN)r0   r?   r@   r³  rW  r´  rV  rµ  r   r   r   r   ÚTest.  s
   
r¶  c                   S   s   d S r   r   r   r   r   r   rÃ   4  s    z5TestIsDataDescriptor.test_functions.<locals>.functionc                   S   s   d S r   r   r   r   r   r   rw   6  rr   z5TestIsDataDescriptor.test_functions.<locals>.<lambda>z*a instance method is not a data descriptorz'a class method is not a data descriptorz(a static method is not a data descriptorz#a function is not a data descriptorz!a lambda is not a data descriptor)r   r8   r3   rb   r³  r´  rµ  )r9   r¶  rÃ   Za_lambdar   r   r   Útest_functions-  s$    ÿÿÿÿÿz#TestIsDataDescriptor.test_functionsN)r0   r?   r@   r¬  r¯  r²  r·  r   r   r   r   r£    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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 r   ©ÚprintÚ_global_refÚunbound_ref©Z	local_ref©Únonlocal_refr   r   rØ   I  s    z=TestGetClosureVars.test_name_resolution.<locals>.f.<locals>.gr   ©r¿  rØ   r   r¾  r   r×   H  s    z2TestGetClosureVars.test_name_resolution.<locals>.fr¿  r»  rº  r¼  ©r   r»  rº  r3   ÚClosureVarsr¥   Úgetclosurevars©r9   r×   Ú_argÚnonlocal_varsÚglobal_varsÚbuiltin_varsÚunbound_namesrû  r   r   r   Útest_name_resolutionF  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 r   r¹  r½  r¾  r   r   rØ   W  s    z?TestGetClosureVars.test_generator_closure.<locals>.f.<locals>.gr   rÀ  r   r¾  r   r×   V  s    z4TestGetClosureVars.test_generator_closure.<locals>.fr¿  r»  rº  r¼  rÁ  rÄ  r   r   r   Útest_generator_closureU  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 r   r¹  r½  r¾  r   r   rØ   g  s    z>TestGetClosureVars.test_method_closure.<locals>.C.f.<locals>.gr   )r9   r¿  rØ   r   r¾  r   r×   f  s    z3TestGetClosureVars.test_method_closure.<locals>.C.fNrž  r   r   r   r   r…   e  s   r…   r¿  r»  rº  r¼  )r   r»  rº  r3   rÂ  r¥   rÃ  r×   )r9   r…   rÅ  rÆ  rÇ  rÈ  rÉ  rû  r   r   r   Útest_method_closured  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 r   )r3   rÃ  Z	nonlocalsr   r   r   r   Ú_nonlocal_varsu  s    z=TestGetClosureVars.test_nonlocal_vars.<locals>._nonlocal_varsc                    s   ‡ fdd„}|S )Nc                    s   ˆ |  S r   r   ©rË   r—  r   r   Úaddy  s    zFTestGetClosureVars.test_nonlocal_vars.<locals>.make_adder.<locals>.addr   )r‹   rÏ  r   r—  r   Ú
make_adderx  s    z9TestGetClosureVars.test_nonlocal_vars.<locals>.make_adderc                    s   ‡ ‡fdd„S )Nc                    s
   ˆˆ | ƒS r   r   ©r  ©r  r£  r   r   rw   ~  rr   zFTestGetClosureVars.test_nonlocal_vars.<locals>.curry.<locals>.<lambda>r   )r£  r  r   rÒ  r   Úcurry}  s    z4TestGetClosureVars.test_nonlocal_vars.<locals>.curryc                 S   s   | |k S r   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 r   r   r—  r   r   r   rw   †  rr   zMTestGetClosureVars.test_nonlocal_vars.<locals>.Y.<locals>.g.<locals>.<lambda>r   r   ©Úler   r   rØ   …  s    z;TestGetClosureVars.test_nonlocal_vars.<locals>.Y.<locals>.g)Úg_ref)rÖ  rØ   )ÚYrÕ  r   rØ  „  s    z0TestGetClosureVars.test_nonlocal_vars.<locals>.Yc                    s   ˆ  ˆ| ƒdˆ ji¡ d S )Nr×   )r¥   r×  ©r£  ©rØ  rÍ  r9   r   r   Úcheck_y_combinatorŠ  s    zATestGetClosureVars.test_nonlocal_vars.<locals>.check_y_combinatorr   r   r—   r‹   rÒ  c                    s   ‡ fdd„S )Nc                    s   ˆ |  S r   r   rÎ  r—  r   r   rw   •  rr   zITestGetClosureVars.test_nonlocal_vars.<locals>.<lambda>.<locals>.<lambda>r   r—  r   r—  r   rw   •  rr   z7TestGetClosureVars.test_nonlocal_vars.<locals>.<lambda>rº   )r¥   )r9   rÐ  rÓ  rÔ  rÛ  ZincZadd_twoZgreater_than_fiver   rÚ  r   Útest_nonlocal_varss  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 r   r   r   r   r   r   r   š  rr   z9TestGetClosureVars.test_getclosurevars_empty.<locals>.fooc                   S   s   dS ©NTr   r   r   r   r   rw   œ  rr   z>TestGetClosureVars.test_getclosurevars_empty.<locals>.<lambda>)r3   rÂ  r2   r¥   rÃ  )r9   r   Z_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>.TNru   r   r   r   r   ÚT   rr   rß  r   )r/  r0  r3   rÃ  r~   )r9   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#   )r9   ÚcoderO  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 )Nrf  rº  rß  )râ  Úpopr3   rÂ  rº  r¥   rÃ  ©r9   r×   rO  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   rf  rº  )râ  r3   rÂ  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 )Nrf  rß  rº  )râ  rÝ  r3   rÂ  rß  r¥   rÃ  rä  r   r   r   Útest_builtins_as_module·  s    z*TestGetClosureVars.test_builtins_as_moduleN)r0   r?   r@   rÊ  rË  rÌ  rÜ  rÞ  rà  râ  rå  ræ  rç  r   r   r   r   r¸  D  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 )NrÙ  úfunc(%s)úinspect.getcallargs(func, %s))r‡   r.   r¥   )r9   r£  Úcall_params_stringÚlocsZr1Zr2r   r   r   ÚassertEqualCallArgsÀ  s    
ÿz,TestGetcallargsFunctions.assertEqualCallArgsc              
   C   sÐ   t |pi |d}ztd| d |ƒ W n( tyL } z|}W Y d }~nd }~0 0 |  d¡ ztd| d |ƒ W n( ty” } z|}W Y d }~nd }~0 0 |  d¡ |  t|ƒt|ƒ¡ |  t|ƒt|ƒ¡ ~~d S )NrÙ  ré  zException not raisedrê  )r‡   r.   r[   Zfailr¾   r_   r¥   r  )r9   r£  Zcall_param_stringrì  rh   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.   )r9   rM  rá  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 )Núa, b=1Ú2ú2, 3ú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)©rï  rí  ©r9   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, *crñ  rò  ú2, 3, 4z*(2,3,4)z	2, *[3,4]z 2, 3, *collections.UserList([4])rô  rõ  r   r   r   Útest_varargsö  s    
z%TestGetcallargsFunctions.test_varargsc                 C   sz   |   d¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d	¡ |  |d
¡ d S )Nza, b=1, **cró  z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)rô  rõ  r   r   r   Ú
test_varkwÿ  s    
z#TestGetcallargsFunctions.test_varkwc                 C   sV   |   d¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )Nú**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)rô  rõ  r   r   r   Útest_varkw_only  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)rï  rí  rî  rõ  r   r   r   Útest_keyword_only  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)rô  rõ  r   r   r   Útest_multiple_features%  s    

z/TestGetcallargsFunctions.test_multiple_featuresc           	      C   s   |   d¡}|   d¡}|   d¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ ||fD ]ˆ}|  |d	¡ |  |d
¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ q’|   d¡}|  |d¡ |  |d¡ |   d¡}|  |d¡ |  |d¡ dd„ }|  td¡ t |¡ W d   ƒ n1 s–0    Y  dd„ }|  td¡ t |¡ W d   ƒ n1 sÖ0    Y  |  td¡$ tjdtjjd d! W d   ƒ n1 s0    Y  |  td"¡  tjd#d$d d! W d   ƒ n1 sV0    Y  |  td%¡ tjd&d'd( W d   ƒ n1 s’0    Y  d S ))Nrå   za, brð  rU  r  z1,x=1ró  zb=3r÷  z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=3rú  z1, 2z1, 2, a=1, b=2z	*, a, b=0c                 S   s   d S r   r   r4  r   r   r   Úf5l  rr   z0TestGetcallargsFunctions.test_errors.<locals>.f5zmissing 1 required keyword-onlyc                 S   s   d S r   r   ©r   r‚   r   r   r   r   Úf6s  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  ©r  )	rï  rî  r   r0  r3   Zgetcallargsr  r-  ÚVAR_KEYWORD)	r9   Zf0Úf1Úf2r×   Úf3Úf4rÿ  r  r   r   r   Útest_errors=  sh    




ÿ**ÿÿ&ÿ0ÿz$TestGetcallargsFunctions.test_errors)N)N)r0   r?   r@   rí  rî  rï  rö  rø  rù  rû  rý  rþ  r  r   r   r   r   rè  ¾  s   

	
rè  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>.FooNru   r   r   r   r   ÚFoo‰  s   r  )r   r   Úinst)r9   r  r   r   r   rã   ˆ  s    zTestGetcallargsMethods.setUpc                    s$   t t| ƒj}|d| ƒ| j_| jjS )Nzself, )râ  r  rï  r   r§  r  )r9   rM  Úmkrã  r   r   rï  Ž  s    z#TestGetcallargsMethods.makeCallable)r0   r?   r@   rã   rï  rê  r   r   rã  r   r  †  s   r  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 r   )râ  r  rï  r   r§  ©r9   rM  rã  r   r   rï  –  s    z*TestGetcallargsUnboundMethods.makeCallableNc                    s   t t| ƒj|  |||¡Ž S r   )râ  r  rí  Ú_getAssertEqualParams©r9   r£  rë  rì  rã  r   r   rí  š  s    
ÿz1TestGetcallargsUnboundMethods.assertEqualCallArgsc                    s   t t| ƒj|  |||¡Ž S r   )râ  r  rî  r  r  rã  r   r   rî  ž  s    
ÿz2TestGetcallargsUnboundMethods.assertEqualExceptionc                 C   s    t |pi | jd}|d| |fS )N)r  zinst,)r‡   r  r  r   r   r   r  ¢  s    z3TestGetcallargsUnboundMethods._getAssertEqualParams)N)N)N)r0   r?   r@   rï  rí  rî  r  rê  r   r   rã  r   r  ”  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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   ƒ n1 sp0    Y  |  t |dd¡d¡ d S )Nc                   @   s   e Zd Zeƒ ZdS )z+TestGetattrStatic.test_basic.<locals>.ThingN©r0   r?   r@   r   r‹   r   r   r   r   ÚThing«  s   r  r‹   rË   rº   )r   r¥   r3   Úgetattr_staticr‹   r/  r8  ©r9   r  Ú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>.ThingNr  r   r   r   r   r  ·  s   r  c                   @   s   e Zd ZdS )z4TestGetattrStatic.test_inherited.<locals>.OtherThingNru   r   r   r   r   Ú
OtherThing¹  s   r  r‹   ©r   r¥   r3   r  r‹   )r9   r  r  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 r   r—  ©r9   r‹   r   r   r   r®   Â  s    z<TestGetattrStatic.test_instance_attr.<locals>.Thing.__init__N)r0   r?   r@   r‹   r®   r   r   r   r   r  À  s   r  rº   r‹   r   r  r  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 existr7  rR   r   r   r   r‹   Ë  s    z0TestGetattrStatic.test_property.<locals>.Thing.xN)r0   r?   r@   r9  r‹   r   r   r   r   r  Ê  s   r  r‹   r  r  r   r   r   r²  É  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 r!  r7  )Ú_r   r   r   rî  Ó  s    zSTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.descriptor.__get__Nr¥  r   r   r   r   Ú
descriptorÒ  s   r#  c                       s   e Zd Z” ZdS )zFTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.ThingN©r0   r?   r@   r‹   r   ©Zdescr   r   r  Ö  s   r  r‹   )r   r¥   r3   r  )r9   r#  r  r  r   r%  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>.ThingNr  r   r   r   r   r  Ü  s   r  r‹   r  ©r9   r  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 r   )Ú_xrR   r   r   r   r‹   ã  s    z=TestGetattrStatic.test_classVirtualAttribute.<locals>.Thing.xN)r0   r?   r@   r^   ro  r‹   r   r)  r   r   r   r   r  â  s   
r  r‹   )r   r¥   r3   r  rD  r'  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>.ThingNr  r   r   r   r   r  ë  s   r  c                   @   s   e Zd ZdS )zCTestGetattrStatic.test_inherited_classattribute.<locals>.OtherThingNru   r   r   r   r   r  í  s   r  r‹   r  ©r9   r  r  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—  rR   r   r   r   r®   ö  s    z4TestGetattrStatic.test_slots.<locals>.Thing.__init__N)r0   r?   r@   rË   r„   r®   r   r   r   r   r  ó  s   r  r‹   rË   r   r  r  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)r0   r?   r@   r{   r   r   r   r   Úmeta   s   r/  c                   @   s   e Zd ZdS )z/TestGetattrStatic.test_metaclass.<locals>.ThingNru   r   r   r   r   r    s   r  r”   r{   r   c                   @   s   e Zd ZdS )z-TestGetattrStatic.test_metaclass.<locals>.subNru   r   r   r   r   Úsub  s   r0  c                   @   s   e Zd ZdZdS )z4TestGetattrStatic.test_metaclass.<locals>.OtherThingrº   Nr$  r   r   r   r   r    s   r  c                   @   s   e Zd ZdS )z9TestGetattrStatic.test_metaclass.<locals>.OtherOtherThingNru   r   r   r   r   ÚOtherOtherThing  s   r1  r‹   rº   ©r_   r   r¥   r3   r  )r9   r/  r  r0  r  r1  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¥   r3   r  ÚassertNotEqualrR   r   r   r   Útest_no_dict_no_slots  s    z'TestGetattrStatic.test_no_dict_no_slotsc                 C   sF   t tƒ*}|  t |d¡t|ƒj¡ W d   ƒ n1 s80    Y  d S )NrF  )rÝ   rÂ   r¥   r3   r  r_   rF  )r9   Úhandler   r   r   Ú%test_no_dict_no_slots_instance_member  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 r-  r—  rR   r   r   r   r®     s    z>TestGetattrStatic.test_inherited_slots.<locals>.Thing.__init__N)r0   r?   r@   r„   r®   r   r   r   r   r    s   r  c                   @   s   e Zd ZdS )z:TestGetattrStatic.test_inherited_slots.<locals>.OtherThingNru   r   r   r   r   r  !  s   r  r‹   r  r+  r   r   r   Útest_inherited_slots  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 ró  r   ©r9   ÚinstanceÚownerr   r   r   rî  )  s    z=TestGetattrStatic.test_descriptor.<locals>.descriptor.__get__Nr¥  r   r   r   r   r#  (  s   r#  c                       s   e Zd Z” ƒ ZdS )z.TestGetattrStatic.test_descriptor.<locals>.FooN©r0   r?   r@   rÖ   r   ©r#  r   r   r  +  s   r  r   rÖ   c                 S   s   d S r   r   )rR  r%   Úvr   r   r   rw   6  rr   z3TestGetattrStatic.test_descriptor.<locals>.<lambda>)r   rD  r¥   r3   r  rð  ©r9   r  r   r   r>  r   Útest_descriptor'  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 ró  r   r:  r   r   r   rî  <  s    zLTestGetattrStatic.test_metaclass_with_descriptor.<locals>.descriptor.__get__Nr¥  r   r   r   r   r#  ;  s   r#  c                       s   e Zd Z” ƒ ZdS )z>TestGetattrStatic.test_metaclass_with_descriptor.<locals>.metaNr=  r   r>  r   r   r/  >  s   r/  c                   @   s   e Zd ZdS )z?TestGetattrStatic.test_metaclass_with_descriptor.<locals>.ThingNru   r   r   r   r   r  @  s   r  r”   rÖ   )r   r_   r¥   r3   r  rD  )r9   r/  r  r   r>  r   Útest_metaclass_with_descriptor:  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º   Nr‘   r   r   r   r   ÚBaseF  s   rC  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 rÝ  )Úexecutedr   rR   r   r   r   rä  K  s    zETestGetattrStatic.test_class_as_property.<locals>.Something.__class__N)r0   r?   r@   rD  r9  rä  r   r   r   r   Ú	SomethingI  s   rE  r   rº   )r   r¥   r3   r  r8   rD  )r9   rC  rE  r;  r   r   r   Útest_class_as_propertyE  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 r   rš  rR   r   r   r   Ú__mro__W  s    z<TestGetattrStatic.test_mro_as_property.<locals>.Meta.__mro__N)r0   r?   r@   r9  rG  r   r   r   r   rn  V  s   rn  c                   @   s   e Zd ZdZdS )z4TestGetattrStatic.test_mro_as_property.<locals>.Baserº   Nr‘   r   r   r   r   rC  [  s   rC  c                   @   s   e Zd ZdS )z9TestGetattrStatic.test_mro_as_property.<locals>.SomethingNru   r   r   r   r   rE  ^  s   rE  r”   r   rº   r2  )r9   rn  rC  rE  r   r   r   Útest_mro_as_propertyU  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 rÝ  )ÚcalledrR   ©r*  r   r   rD  j  s    z=TestGetattrStatic.test_dict_as_property.<locals>.Foo.__dict__N)r0   r?   r@   r   r9  rD  r   rJ  r   r   r  h  s   r  r  r   rº   )rI  r‡   r   r¥   r3   r  r8   r@  r   rJ  r   Útest_dict_as_propertyd  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 rÝ  )rI  râ  Úget)r9   Úkeyr  )rä  r*  r   r   rL  y  s    z=TestGetattrStatic.test_custom_object_dict.<locals>.Custom.get)N)r0   r?   r@   rL  rê  r   rJ  rã  r   ÚCustomx  s   rN  c                   @   s   e Zd ZdZdS )z6TestGetattrStatic.test_custom_object_dict.<locals>.Foorº   N)r0   r?   r@   r   r   r   r   r   r  }  s   r  r   rº   )rI  r‡   r   rD  r¥   r3   r  r8   )r9   rN  r  r   r   rJ  r   Útest_custom_object_dictt  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 rÝ  )rD  rR   r   r   r   rD  †  s    zHTestGetattrStatic.test_metaclass_dict_as_property.<locals>.Meta.__dict__N©r0   r?   r@   r9  rD  r   r   r   r   rn  …  s   rn  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†   ©rQ   rR   r   r   r   r®     s    zITestGetattrStatic.test_metaclass_dict_as_property.<locals>.Thing.__init__N)r0   r?   r@   rD  r®   r   r   r   r   r  Š  s   r  r”   rQ   r†   )r_   r¥   r3   r  r8   rD  )r9   rn  r  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   ÚassertIsNotr3   r  r  )r9   Úsentinelr   r   r   Útest_module”  s    ÿzTestGetattrStatic.test_modulec                 C   s|   G dd„ dt ƒ}G dd„ dt |d}G dd„ d|d}|  t¡ t |d¡ W d   ƒ n1 sb0    Y  |  |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†   rR  )rD  r‡   rR   r   r   r   rD  ›  s    z`TestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.MetaMeta.__dict__NrP  r   r   r   r   ÚMetaMetaš  s   rX  c                   @   s   e Zd ZdZdS )zSTestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.MetaFN)r0   r?   r@   rD  r   r   r   r   rn     s   rn  r”   c                   @   s   e Zd ZdS )zTTestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.ThingNru   r   r   r   r   r  £  s   r  rQ   )r_   r/  r8  r3   r  r8   rD  )r9   rX  rn  r  r   r   r   Ú3test_metaclass_with_metaclass_with_dict_as_property™  s    *zETestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_propertyN)r0   r?   r@   r  r  r   r²  r&  r(  r*  r,  r.  r3  r6  r8  r9  rA  rB  rF  rH  rK  rO  rS  rW  rY  r   r   r   r   r  ¨  s,   	

	r  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   t dƒD ]
} | V  qd S ©Nr—   rL   ©Znumberr   r   r   Únumber_generator­  s    z5TestGetGeneratorState.setUp.<locals>.number_generator)Ú	generator)r9   r]  r   r   r   rã   ¬  s    zTestGetGeneratorState.setUpc                 C   s   t  | j¡S r   )r3   Zgetgeneratorstater^  rR   r   r   r   Ú_generatorstate²  s    z%TestGetGeneratorState._generatorstatec                 C   s   |   |  ¡ tj¡ d S r   )r¥   r_  r3   ZGEN_CREATEDrR   r   r   r   Útest_createdµ  s    z"TestGetGeneratorState.test_createdc                 C   s    t | jƒ |  |  ¡ tj¡ d S r   )Únextr^  r¥   r_  r3   ZGEN_SUSPENDEDrR   r   r   r   Útest_suspended¸  s    
z$TestGetGeneratorState.test_suspendedc                 C   s"   | j D ]}q|  |  ¡ tj¡ d S r   )r^  r¥   r_  r3   Ú
GEN_CLOSEDrM   r   r   r   Útest_closed_after_exhaustion¼  s    
z2TestGetGeneratorState.test_closed_after_exhaustionc                 C   sL   |   t¡ | j t¡ W d   ƒ n1 s,0    Y  |  |  ¡ tj¡ d S r   )r/  rï  r^  r*   r¥   r_  r3   rc  rR   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<   t dƒD ].} ˆ  ˆ  ¡ tj¡ | V  ˆ  ˆ  ¡ tj¡ qd S r[  )r   r¥   r_  r3   ZGEN_RUNNINGr\  rR   r   r   Úrunning_check_generatorË  s    zCTestGetGeneratorState.test_running.<locals>.running_check_generator)r^  ra  )r9   rf  r   rR   r   Útest_runningÆ  s    
z"TestGetGeneratorState.test_runningc                 C   s@   d  ¡ }|D ].}tt|ƒ}|  |t|ƒ¡ |  |t|ƒ¡ qd S )Nz0GEN_CREATED GEN_RUNNING GEN_SUSPENDED GEN_CLOSED©ræ   rg  r3   r‰   Úreprr  ©r9   ÚnamesrF  Ústater   r   r   Útest_easy_debuggingÖ  s
    
z)TestGetGeneratorState.test_easy_debuggingc              	   C   sâ   ddd„}|g d¢ƒ}|   t |¡d g d¢dœ¡ t|ƒ |   t |¡d g d¢dddœ¡ t|ƒ |   t |¡d g d¢dddœ¡ t|ƒ |   t |¡d g d¢ddd	d
œ¡ zt|ƒ W n tyÊ   Y n0 |   t |¡i ¡ d S )Nc                 s   s$   d}| D ]}|dkrd}|V  qd S )Nr  rº   rQ  r   )Úlstr   r‚   r?  r   r   r   r   Úeachß  s
    z;TestGetGeneratorState.test_getgeneratorlocals.<locals>.eachr  )r   rn  r   )r   rn  r?  r‚   r   rº   rQ  )r   rn  r?  r‚   r   )N©r¥   r3   Úgetgeneratorlocalsra  ÚStopIteration)r9   ro  Znumbersr   r   r   Útest_getgeneratorlocalsÞ  s8    
ÿ
ÿÿ
ÿÿ
ÿÿz-TestGetGeneratorState.test_getgeneratorlocalsc                 C   sV   dd„ }|ƒ }|   t |¡i ¡ zt|ƒ W n ty>   Y n0 |   t |¡i ¡ d S )Nc                   s   s
   dV  d S rj   r   r   r   r   r   Ú	yield_oneü  s    zFTestGetGeneratorState.test_getgeneratorlocals_empty.<locals>.yield_onerp  )r9   rt  r„  r   r   r   Útest_getgeneratorlocals_emptyû  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 rÝ  r   r—  r   r   r   rw     rr   zETestGetGeneratorState.test_getgeneratorlocals_error.<locals>.<lambda>)r   rº   )r/  r0  r3   rq  r2   rR   r   r   r   Útest_getgeneratorlocals_error  s    z3TestGetGeneratorState.test_getgeneratorlocals_errorN)r0   r?   r@   rã   r_  r`  rb  rd  re  rg  rm  rs  ru  rv  r   r   r   r   rZ  ª  s   rZ  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   t dƒD ]
} | V  qd S r[  rL   r\  r   r   r   Únumber_coroutine  s    z5TestGetCoroutineState.setUp.<locals>.number_coroutinec                   “   s   ˆ ƒ I d H  d S r   r   r   ©rx  r   r   Ú	coroutine  s    z.TestGetCoroutineState.setUp.<locals>.coroutine)r^   rz  )r9   rz  r   ry  r   rã     s    
zTestGetCoroutineState.setUpc                 C   s   | j  ¡  d S r   )rz  rm   rR   r   r   r   rç    s    zTestGetCoroutineState.tearDownc                 C   s   t  | j¡S r   )r3   Zgetcoroutinestaterz  rR   r   r   r   Ú_coroutinestate  s    z%TestGetCoroutineState._coroutinestatec                 C   s   |   |  ¡ tj¡ d S r   )r¥   r{  r3   ZCORO_CREATEDrR   r   r   r   r`    s    z"TestGetCoroutineState.test_createdc                 C   s"   | j  d ¡ |  |  ¡ tj¡ d S r   )rz  Úsendr¥   r{  r3   ZCORO_SUSPENDEDrR   r   r   r   rb  !  s    z$TestGetCoroutineState.test_suspendedc                 C   s@   z| j  d ¡ W q  ty&   Y q*Y q 0 q |  |  ¡ tj¡ d S r   )rz  r|  rr  r¥   r{  r3   ÚCORO_CLOSEDrR   r   r   r   rd  %  s
    z2TestGetCoroutineState.test_closed_after_exhaustionc                 C   sL   |   t¡ | j t¡ W d   ƒ n1 s,0    Y  |  |  ¡ tj¡ d S r   )r/  rï  rz  r*   r¥   r{  r3   r}  rR   r   r   r   re  .  s    *z;TestGetCoroutineState.test_closed_after_immediate_exceptionc                 C   s@   d  ¡ }|D ].}tt|ƒ}|  |t|ƒ¡ |  |t|ƒ¡ qd S )Nz4CORO_CREATED CORO_RUNNING CORO_SUSPENDED CORO_CLOSEDrh  rj  r   r   r   rm  3  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 r   r   r   r   r   r   Úgencoro<  s    z>TestGetCoroutineState.test_getcoroutinelocals.<locals>.gencoroc                 “   s   d}ˆ I d H  d S rP   r   r   ©r~  r   r   r£  A  s    z;TestGetCoroutineState.test_getcoroutinelocals.<locals>.func)r   r~  rQ   )r   r~  r‚   )N)r^   rz  r¥   r3   Zgetcoroutinelocalsr|  )r9   r£  ro   r   r  r   Útest_getcoroutinelocals;  s    
ÿ

ÿz-TestGetCoroutineState.test_getcoroutinelocalsN)r0   r?   r@   rã   rç  r{  r`  rb  rd  re  rm  r€  r   r   r   r   rw    s   		rw  c                   @   s   e Zd ZdS )ÚMySignatureNru   r   r   r   r   r  M  s   r  c                   @   s   e Zd ZdS )ÚMyParameterNru   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d2d3„ Z d4d5„ Z!e ed¡d6d7„ ƒZ"e ed¡d8d9„ ƒZ#d:d;„ Z$d<d=„ Z%d>d?„ Z&d@dA„ Z'dBdC„ Z(dDdE„ Z)dFdG„ Z*dHdI„ Z+dJdK„ Z,dLdM„ Z-e ed¡dNdO„ ƒZ.dPdQ„ Z/dRdS„ Z0dTS )UÚTestSignatureObjectc                 K   s@   t j| fi |¤Ž}tdd„ |j ¡ D ƒƒ|j|ju r8dn|jfS )Nc                 s   sJ   | ]B}|j |j|ju rd n|j|j|ju r.d n|jt|jƒ ¡ fV  qdS ).N)rF  r  ÚemptyÚ
annotationr  r  r4  )rû   Úparamr   r   r   Ú	<genexpr>]  s   ûüz0TestSignatureObject.signature.<locals>.<genexpr>.)r3   rM  Útupler$   ÚvaluesÚreturn_annotationr„  )r£  ÚkwÚsigr   r   r   rM  Z  s    ûùzTestSignatureObject.signaturec                 C   sÖ  t j}t j}|  t|ƒ ƒd¡ |  t|ƒ jƒ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   ƒ n1 sæ0    Y  |  
td¡" |||	||
|fƒ W d   ƒ n1 s&0    Y  |  
td¡" ||	|||
|fƒ W d   ƒ n1 sf0    Y  |  
td¡" ||||	||
fƒ W d   ƒ n1 s¦0    Y  |jdd}|  
td¡" ||||	||
fƒ W d   ƒ n1 sò0    Y  |  
td¡ |||fƒ W d   ƒ n1 s,0    Y  |  
td¡ ||||fƒ W d   ƒ n1 sh0    Y  |  
td¡ |||fƒ W d   ƒ n1 s¢0    Y  |  t|ƒ d¡¡ |  dt|ƒv ¡ d S )Nú()zmappingproxy(OrderedDict())r†   éd   c                _   s   d S r   r   )ÚpoÚpkÚpodÚpkdÚkor   r²   r   r   r   r*  m  s    z7TestSignatureObject.test_signature_object.<locals>.testr  r  r‘  r  r’  r   r“  r²   zwrong parameter order©rF  zduplicate parameter namezfollows default argumentz
<Signaturez(po, pk)r†   rŽ  )r3   r/  r-  r¥   r  ri  r$   rM  Úreplacer.  r   r  r/   r2  )r9   ÚSÚPr*  rŒ  r  r‘  r  r’  r   r“  r²   Zkwargs2r   r   r   Útest_signature_objectf  sB    






02222,.,z)TestSignatureObject.test_signature_objectc           	   	   C   s†  i dœdddidœdd„}t j|dd}t |¡}ttjd ƒD ]P}| j|d	d
. t t 	||¡¡}|  
||¡ W d   ƒ q@1 s†0    Y  q@t |¡}tdtjjd}tj|j|d}tƒ j| ¡ |jd}|  t|tƒ¡ |  t|jd tƒ¡ ttjd ƒD ]z}| j|dd
T t t 	||¡¡}|  
||¡ |  t|tƒ¡ |  t|jd tƒ¡ W d   ƒ n1 st0    Y  qd S )N©r   r   r†   r  ©r   r3  c                [   s   d S r   r   ©r   r‚   r   r‹  r   r   r   r   —  rr   z=TestSignatureObject.test_signature_object_pickle.<locals>.foor4  F)Ú
pickle_verÚsubclassr   )rF  r  )r$   rŠ  T)rk   rl   r3   rM  r   ÚpickleÚHIGHEST_PROTOCOLÚsubTestÚloadsÚdumpsr¥   r‚  r-  r.  ÚcollectionsÚOrderedDictr$   r  r•  r‰  rŠ  r/   rh  )	r9   r   Zfoo_partialrŒ  ÚverZsig_pickledZmyparamZmyparamsZmysigr   r   r   Útest_signature_object_pickle–  s.    
,
ÿÿz0TestSignatureObject.test_signature_object_picklec                 C   sz   dd„ }t  |¡}|  t¡ d|_W d   ƒ n1 s80    Y  |  t¡ d |jd< W d   ƒ n1 sl0    Y  d S )Nc                 S   s   d S r   r   r4  r   r   r   r*  ³  s    z=TestSignatureObject.test_signature_immutability.<locals>.testr   r   )r3   rM  r/  r8  r   r0  r$   ©r9   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 r   r   r   r   r   r   r*  ¾  s    z9TestSignatureObject.test_signature_on_noarg.<locals>.test©r   .©r¥   rM  ©r9   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   r  ©r‚   r3  c                 S   s   d S r   r   r   r   r   r   r*  Ã  s    z9TestSignatureObject.test_signature_on_wargs.<locals>.test))©r   ..Úpositional_or_keyword)r‚   .r   r¯  r  rª  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‚   r3  c                 S   s   d S r   r   r   r   r   r   r*  Ë  s    z;TestSignatureObject.test_signature_on_wkwonly.<locals>.testr   .Úkeyword_onlyr‚   )Úfloatr  rš   r¥   rM  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]  r  )r  r   r   Úbaz)r‚   r   rQ   r²   c                _   s   d S r   r   )r   r‚   rQ   r  r   r²   r   r   r   r*  Ó  s    z@TestSignatureObject.test_signature_on_complex_args.<locals>.testr®  )r‚   r]  r   r¯  )r   .r   Úvar_positional)rQ   .r´  r±  )r  r  .r±  r²   .Úvar_keyword)r]  )rš   r¥   rM  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 r   r   rí  r   r   r   Útest_args_onlyß  s    zGTestSignatureObject.test_signature_without_self.<locals>.test_args_onlyc                  _   s   d S r   r   ©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 r   r   rí  r   r   r   Útest_classmethodæ  s    zKTestSignatureObject.test_signature_without_self.<locals>.A.test_classmethodc                  W   s   d S r   r   rí  r   r   r   Útest_staticmethodê  s    zLTestSignatureObject.test_signature_without_self.<locals>.A.test_staticmethodr   N)r0   r?   r@   rW  r»  rV  r¼  rk   r$  r  r	  r
  r  r   ©rº  r¸  r   r   rø  å  s   

rø  ©)©r   ..rµ  .©)r¿  ©r²   ..r¶  .)r¥   rM  r  r	  r
  r  rP  r   r½  r   Útest_signature_without_selfÞ  s*    ÿÿÿÿÿÿz/TestSignatureObject.test_signature_without_selfr9  c                    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   ƒ n1 sŽ0    Y  |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   r9   )
r3   rM  r/   rh  r/  r¥   r~   r$   r‰  rF  ©r   rM  rR   r   r   Útest_unbound_method	  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   r9   )
r3   rM  r/   rh  r/  r$   r5  r~   r‰  rF  rÃ  rR   r   r   Útest_callable	  s
    
zETestSignatureObject.test_signature_on_builtins.<locals>.test_callablec                    s   ˆ j |  jS r   )r$   r  r”  )rM  r   r   r&   	  rr   z9TestSignatureObject.test_signature_on_builtins.<locals>.prR  rC  r‚   s   bytesrÖ   g…ëQ¸	@r%   é#   Únrô  Tr×   FÚlocalrº   r  r;   s   abczno signature foundc                   @   s   e Zd ZeZdS )zDTestSignatureObject.test_signature_on_builtins.<locals>.ThisWorksNowN)r0   r?   r@   r_   r"  r   r   r   r   ÚThisWorksNow?	  s   rÉ  )rD  rE  r¥   r  ÚmaxsizerŠ   r$   r   r<  r=  r>  r?  ÚStringIOÚbytesÚ	maketransr‡   Úfromkeysr_   r"  rš   rc  Úminr   r  Ú__delitem__r9  r©  Z#docstring_with_signature_but_no_doc)r9   rD  rÄ  rÅ  r&   rÖ   rÉ  r   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©r3  c                     s   ˆ | i |¤ŽS r   r   r¹  rÙ  r   r   ÚwrapperR	  s    z\TestSignatureObject.test_signature_on_decorated_builtins.<locals>.decorator.<locals>.wrapper)rk   r#  rš   ©r£  rÓ  r   rÙ  r   Ú	decoratorQ	  s    zKTestSignatureObject.test_signature_on_decorated_builtins.<locals>.decoratorrÒ  c                  _   s   d S r   r   r¹  r   r   r   Úwrapper_like\	  rr   zNTestSignatureObject.test_signature_on_decorated_builtins.<locals>.wrapper_likeF©Zfollow_wrapped)rD  rE  r¥   r3   rM  rš   )r9   rD  r£  rÕ  Zdecorated_funcrÖ  r   r   r   Ú$test_signature_on_decorated_builtinsJ	  s    ÿ
ÿþz8TestSignatureObject.test_signature_on_decorated_builtinsc                 C   sz   dd l }|  td¡ t |j¡ W d   ƒ n1 s60    Y  |  td¡ t t¡ W d   ƒ n1 sl0    Y  d S )Nr   zno signature found for builtin)rD  r   r  r3   rM  rH  r  )r9   rD  r   r   r   Ú'test_signature_on_builtins_no_signaturea	  s    ÿ*ÿz;TestSignatureObject.test_signature_on_builtins_no_signaturec                 C   s:   |   td¡ t d¡ W d   ƒ n1 s,0    Y  d S )Núis not a callable objectr†   )r   r0  r3   rM  rR   r   r   r   Útest_signature_on_non_functionl	  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
|¡P ||ƒ}|  
t  |¡¡ d|_|  t  |¡¡ |  t  |¡|¡ W d   ƒ n1 sò0    Y  d S )NT©Úkwonlyc                _   s   d S r   r   ©r   r‚   rÝ  Z	kwonlyreqr   r²   r   r   r   r£  q	  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 r   )r0   rE  r5  Ú__defaults__Ú__kwdefaults__r£  )r9   r£  r   r   r   r®   y	  s    zVTestSignatureObject.test_signature_from_functionlike_object.<locals>.funclike.__init__c                 _   s   | j |i |¤ŽS r   rÙ  r±   r   r   r   r"  	  s    zVTestSignatureObject.test_signature_from_functionlike_object.<locals>.funclike.__call__N)r0   r?   r@   r®   r"  r   r   r   r   Úfuncliket	  s   rá  rÀ  c                    s   t | dƒrdS ˆ | ƒS )NÚ_builtinmockT©r]   )r<   ©Z_orig_isdescr   r   Ú_isdesc˜	  s    
zLTestSignatureObject.test_signature_from_functionlike_object.<locals>._isdesczinspect.ismethoddescriptor)r3   r/  Úfrom_callabler¥   rM  rß  rœ  r¬   r  r  r8   râ  r/   )r9   r£  rá  Zsig_funcZsig_funclikeZflrå  Zbuiltin_funcr   rä  r   Ú'test_signature_from_functionlike_objectp	  s(    ÿz;TestSignatureObject.test_signature_from_functionlike_objectc                    s:   ddœdd„‰ G ‡ fdd„dƒ}|   tt |¡ƒd¡ d S )NTrÜ  c                _   s   d S r   r   rÞ  r   r   r   r£  ©	  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 r   r   )r9   Zmarkerr   r   r   r®   ­	  s    zPTestSignatureObject.test_signature_functionlike_class.<locals>.funclike.__init__N)r0   r?   r@   r®   rE  r5  rß  rà  r   rÙ  r   r   rá  ¬	  s   rá  z(marker))r¥   r  r3   rM  )r9   rá  r   rÙ  r   Ú!test_signature_functionlike_class¥	  s    
z5TestSignatureObject.test_signature_functionlike_classc                 C   sŒ   G dd„ dƒ}|   |  |ƒ j¡dtf¡ |   |  |ƒ j¡d¡ |   |  |¡d¡ |  td¡ |  |ƒ ¡ W d   ƒ n1 s~0    Y  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 r   r   rí  r   r   r   r®   º	  s    zCTestSignatureObject.test_signature_on_method.<locals>.Test.__init__r   rÒ  c                 S   s   d S r   r   ©r9   r  r  r   r   r   rT  ¼	  s    z=TestSignatureObject.test_signature_on_method.<locals>.Test.m1c                  W   s   d S r   r   rí  r   r   r   Úm2¾	  s    z=TestSignatureObject.test_signature_on_method.<locals>.Test.m2c                 S   s   d S r   r   r4  r   r   r   r"  À	  s    zCTestSignatureObject.test_signature_on_method.<locals>.Test.__call__N)r   )r0   r?   r@   r®   rš   rT  rê  r"  r   r   r   r   r¶  ¹	  s   r¶  ©©r  ..r¯  )r  r   .r¯  r¾  zinvalid method signature)r¥   rM  rT  rš   rê  r   r  )r9   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 r   r   ré  r   r   r   rT  Ö	  s    zHTestSignatureObject.test_signature_wrapped_bound_method.<locals>.Test.m1N)r   )r0   r?   r@   rš   rT  r   r   r   r   r¶  Õ	  s   r¶  c                  _   s   d S r   r   r¹  r   r   r   Úm1dØ	  s    zDTestSignatureObject.test_signature_wrapped_bound_method.<locals>.m1drë  )rk   r#  rT  r¥   rM  rš   )r9   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 r   r   )r   r  r  r   r   r   r   â	  s    zCTestSignatureObject.test_signature_on_classmethod.<locals>.Test.fooN)r0   r?   r@   rW  r   r   r   r   r   r¶  á	  s   r¶  ))rì  )r  r   .r±  .©r   r¥   rM  ©r9   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 r   r   )r   r  r   r   r   r   ô	  s    zDTestSignatureObject.test_signature_on_staticmethod.<locals>.Test.fooN)r0   r?   r@   rV  r   r   r   r   r   r¶  ó	  s   r¶  )))r   ..r¯  )r  ..r±  .rð  rñ  r   r   r   Útest_signature_on_staticmethodò	  s    ÿÿz2TestSignatureObject.test_signature_on_staticmethodc           
      C   sˆ  ddl m} tj}dd„ }|  |  ||ƒ¡d¡ |  td¡  t ||dƒ¡ W d   ƒ n1 sb0    Y  |  td¡" t ||dd¡ W d   ƒ n1 s 0    Y  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i |j¤Žd5¡ dGd6d&„}||d7d}t |¡j
d3d}|  ||ji |j¤Žd8¡ t |¡ 
d3d9¡}|  ||ji |j¤Žd:¡ t |¡j
d3d9d}|  ||ji |j¤Žd:¡ t |¡j
d9d}|  ||ji |j¤Žd;¡ ||d'd(d}t |¡ 
d9¡}|  ||ji |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   )rl   c                   S   s   d S r   r   r   r   r   r   r*  	
  s    z;TestSignatureObject.test_signature_on_partial.<locals>.testr©  úhas incorrect argumentsr   r4  c                S   s   d S 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   ))r®  ©r‚   r   .r±  rù  rø  .))rú  rù  rø  .))©r   r   .r±  ©r‚   ..r±  r÷  rø  .c                _   s   d S r   r   )r   r‚   r   r²   r   r   r   r*  >
  s    ))r¿  rü  rÁ  .))rû  rü  rÁ  .rº   TrJ  )r*  r‚   ))r¿  ©r‚   r   .r±  rÁ  .©r‚   ))r®  r¿  rý  rÁ  .)r‚   r*  r†   rš  c                 S   s   d S r   r   r   r   r   r   r*  m
  s    rö  r   .r¯  c                 S   s   | S r   r   r4  r   r   r   r   }
  s    z:TestSignatureObject.test_signature_on_partial.<locals>.foor]  é   )))r   rÿ  .r±  .c                 S   s
   | ||fS r   r   r   r   r   r   r   ‡
  s    ri  )))r‚   ri  .r±  r÷  .)r   ri  r]  c                S   s   | |||fS r   r   r  r   r   r   r   ‘
  s    )rÖ   r   )r‚   rÖ   ))r®  )r‚   r]  .r±  )r   rÿ  .r±  )rÖ   ri  .r±  .éÈ   rÌ   r   )r   rÌ   rÿ  ri  c                 S   s
   | ||fS r   r   r   r   r   r   r   ž
  s    é   )rÌ   r   r  rQ  )rÌ   rQ  r  )r   rQ  r  )rQ  r]  rÿ  c                 [   s   d S r   r   )r   r‚   r   rÖ   r²   r   r   r   r   ³
  s    r   r  r‚   z(a, b, /, c, d, **kwargs)))©r‚   ..Zpositional_only©r   ..r¯  ©rÖ   ..r¯  rÁ  .))r  r  rÁ  .))r  rÁ  .))©r   rº   .r±  rø  rÁ  .))r  r  rø  rÁ  .)r   r   rº   )rk   rl   r3   r-  r¥   rM  r   r  rš   r0  Úbindr   r²   r$   Úcopyr•  r.  r/  r‰  r  )
r9   rl   r-  r*  rŒ  Zpsigr   Z_fooÚbaÚparamsr   r   r   Útest_signature_on_partial
  sî    .0ÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿþÿÿÿÿÿÿ



ÿÿÿÿÿz-TestSignatureObject.test_signature_on_partialc                    s¼   ddl m‰  G ‡ fdd„dƒ}|  td¡ t |j¡ W d   ƒ n1 sL0    Y  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 )úATestSignatureObject.test_signature_on_partialmethod.<locals>.Spamc                   S   s   d S r   r   r   r   r   r   r*  à
  s    úFTestSignatureObject.test_signature_on_partialmethod.<locals>.Spam.testN©r0   r?   r@   r*  r  r   r  r   r   ÚSpamß
  s   r  rõ  c                       s&   e Zd Zddœdd„Z” eddZdS )r  rQ   rÒ  c                S   s   d S r   r   )Úitr   r   r   r   r   r*  è
  s    r  r   r™  Nr  r   r  r   r   r  ç
  s   )))r  ..r¯  r®  ©r   r   .r±  rQ   ))r®  r  rQ   c                       s$   e Zd Zddœdd„Z” edƒZdS )r  ÚannorR   c                 S   s   d S r   r   r  r   r   r   r*  ø
  s    r  r   N)r0   r?   r@   r*  rØ   r   r  r   r   r  ÷
  s   )))r9   .r  r¯  .)	rk   r$  r   r  r3   rM  r  r¥   rØ   )r9   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 r   r   r4  r   r   r   r     rr   zETestSignatureObject.test_signature_on_fake_partialmethod.<locals>.foorQ   z(a))Ú_partialmethodr¥   r  r3   rM  ©r9   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 )NrÒ  c                     s   ˆ | i |¤ŽS r   r   r¹  rÙ  r   r   rÓ  
  s    úSTestSignatureObject.test_signature_on_decorated.<locals>.decorator.<locals>.wrapper)r#  rš   rÔ  ©rk   rÙ  r   rÕ  	  s    zBTestSignatureObject.test_signature_on_decorated.<locals>.decoratorc                       s   e Zd Z” dd„ ƒZdS )ú<TestSignatureObject.test_signature_on_decorated.<locals>.Fooc                 S   s   d S r   r   ©r9   r   r‚   r   r   r   r     s    z@TestSignatureObject.test_signature_on_decorated.<locals>.Foo.barN)r0   r?   r@   r   r   ©rÕ  r   r   r    s   r  ))©r9   ..r¯  r®  rö  .))r®  rö  .Fr×  rÀ  c                    sN   ˆ  ˆ ¡tdœ‡ fdd„ƒ}t ˆ ¡}t|j ¡ ƒdd … }|j|d|_|S )NrÒ  c                     s   ˆ dg| ¢R i |¤ŽS rQ  r   r¹  rÙ  r   r   rÓ  (  s    r  r   r+  )	r#  rš   r3   rM  rˆ  r$   r‰  r•  r0  )r£  rÓ  rŒ  Ú
new_paramsr  rÙ  r   rÕ  '  s    
c                       s   e Zd Z” dd„ ƒZdS )r  c                 S   s   d S r   r   r  r   r   r   r"  1  s    zETestSignatureObject.test_signature_on_decorated.<locals>.Foo.__call__N©r0   r?   r@   r"  r   r  r   r   r  0  s   ©)rö  .c                   S   s   d S r   r   r   r   r   r   Úwrapped_foo_call?  s    zITestSignatureObject.test_signature_on_decorated.<locals>.wrapped_foo_call)rk   r¥   rM  r   r"  Ú__wrapped__)r9   r  r   r   )rÕ  rk   r   Útest_signature_on_decorated  s2    ÿÿÿ	ÿÿÿ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 )ú6TestSignatureObject.test_signature_on_class.<locals>.Cc                 S   s   d S r   r   ©r9   r   r   r   r   r®   K  s    ú?TestSignatureObject.test_signature_on_class.<locals>.C.__init__N©r0   r?   r@   r®   r   r   r   r   r…   J  s   r…   ©)r®  .c                   @   s   e Zd Zdd„ ZdS )ú7TestSignatureObject.test_signature_on_class.<locals>.CMc                 S   s   d S r   r   )r   r   r   r   r   r"  S  s    z@TestSignatureObject.test_signature_on_class.<locals>.CM.__call__Nr  r   r   r   r   r:  R  s   r:  c                   @   s   e Zd Zdd„ ZdS )r#  c                 S   s   d S r   r   ©r9   r‚   r   r   r   r®   V  s    r%  Nr&  r   r   r   r   r…   U  s   r”   c                       s"   e Zd Zddœ‡ fdd„
Z‡  ZS )r(  r   r­  c                   s   t ƒ  | |||¡S r   ©râ  r&  ©ÚmclsrF  ÚbasesÚdctr   rã  r   r   r&  ^  s    ú?TestSignatureObject.test_signature_on_class.<locals>.CM.__new__©r0   r?   r@   r&  rê  r   r   rã  r   r:  ]  s   c                   @   s   e Zd Zdd„ ZdS )r#  c                 S   s   d S r   r   r)  r   r   r   r®   a  s    r%  Nr&  r   r   r   r   r…   `  s   r  ))©rF  ..r¯  ©r-  ..r¯  ©r.  ..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 r   r*  r+  rã  r   r   r&  p  s    z@TestSignatureObject.test_signature_on_class.<locals>.CMM.__new__c                 S   s   t |||ƒS r   )r_   )r   ÚnmÚbsÚdtr   r   r   r"  r  s    zATestSignatureObject.test_signature_on_class.<locals>.CMM.__call__)r0   r?   r@   r&  r"  rê  r   r   rã  r   ÚCMMo  s   r7  c                       s"   e Zd Zddœ‡ fdd„
Z‡  ZS )r(  r   ©r   c                   s   t ƒ  | |||¡S r   r*  )r,  rF  r-  r.  r   rã  r   r   r&  u  s    r/  r0  r   r   rã  r   r:  t  s   c                   @   s   e Zd Zdd„ ZdS )r#  c                 S   s   d S r   r   r)  r   r   r   r®   x  s    r%  Nr&  r   r   r   r   r…   w  s   )))r4  ..r¯  )r5  ..r¯  )r6  ..r¯  .c                       s"   e Zd Zddœ‡ fdd„
Z‡  ZS )r(  r   r8  c                   s   t ƒ  |||¡S r   )râ  r®   )r   rF  r-  r.  r   rã  r   r   r®     s    z@TestSignatureObject.test_signature_on_class.<locals>.CM.__init__)r0   r?   r@   r®   rê  r   r   rã  r   r:  Œ  s   c                   @   s   e Zd Zdd„ ZdS )r#  c                 S   s   d S r   r   r)  r   r   r   r®     s    r%  Nr&  r   r   r   r   r…     s   ))r1  r2  r3  )r   r   .r±  .)r¥   rM  r_   )r9   r…   r:  r7  r   r   r   Útest_signature_on_classI  sD    ÿÿÿÿÿÿÿÿz+TestSignatureObject.test_signature_on_classc                 C   sx   G dd„ dƒ}G dd„ d|ƒ}G dd„ d|ƒ}G dd„ d|ƒ}|   |  |¡d	¡ |   |  |¡d
¡ |   |  |¡d¡ d S )Nc                   @   s   e Zd Zddd„ZdS )z9TestSignatureObject.test_signature_on_subclass.<locals>.Ar   c                 _   s
   t  | ¡S r   ©r   r&  )r   r   r   r²   r   r   r   r&  œ  s    zATestSignatureObject.test_signature_on_subclass.<locals>.A.__new__N)r   ©r0   r?   r@   r&  r   r   r   r   rø  ›  s   rø  c                   @   s   e Zd Zdd„ ZdS )z9TestSignatureObject.test_signature_on_subclass.<locals>.Bc                 S   s   d S r   r   r)  r   r   r   r®   Ÿ  s    zBTestSignatureObject.test_signature_on_subclass.<locals>.B.__init__Nr&  r   r   r   r   rù  ž  s   rù  c                   @   s   e Zd Zddd„ZdS )z9TestSignatureObject.test_signature_on_subclass.<locals>.Cr   r   c                 _   s
   t  | ¡S r   r:  )r   r   r‚   r   r²   r   r   r   r&  ¢  s    zATestSignatureObject.test_signature_on_subclass.<locals>.C.__new__N)r   r   r;  r   r   r   r   r…   ¡  s   r…   c                   @   s   e Zd ZdS )z9TestSignatureObject.test_signature_on_subclass.<locals>.DNru   r   r   r   r   rú  ¤  s   rú  r  ))©r   r   .r¯  )r‚   r   .r¯  r¿  rÁ  .))r<  r¿  rÁ  .rª  )r9   rø  rù  r…   rú  r   r   r   Útest_signature_on_subclassš  s    ÿÿÿz.TestSignatureObject.test_signature_on_subclassc                 C   sP   ddl m}m} |dƒ}G dd„ d|| ƒ}|  |  |¡ddtdffd f¡ d S )	Nr   )ÚGenericÚTypeVarrß  c                   @   s   e Zd Zeddœdd„ZdS )zATestSignatureObject.test_signature_on_generic_subclass.<locals>.ANr2  c                S   s   d S r   r   r$  r   r   r   r®   ¼  s    zJTestSignatureObject.test_signature_on_generic_subclass.<locals>.A.__init__)r0   r?   r@   rš   r®   r   r   r   r   rø  »  s   rø  r   .r±  )Útypingr>  r?  r¥   rM  rš   )r9   r>  r?  rß  rø  r   r   r   Ú"test_signature_on_generic_subclass¶  s    ÿÿz6TestSignatureObject.test_signature_on_generic_subclassc                 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   ƒ n1 sž0    Y  |  td¡" |   t |¡d ¡ W d   ƒ n1 sÜ0    Y  d S )	Nc                   @   s   e Zd ZdS ©zCTestSignatureObject.test_signature_on_class_without_init.<locals>.CNru   r   r   r   r   r…   Ç  rr   r…   r  c                   @   s   e Zd ZdS ©zCTestSignatureObject.test_signature_on_class_without_init.<locals>.DNru   r   r   r   r   rú  É  rr   rú  c                   @   s   e Zd ZdS rB  ru   r   r   r   r   r…   Í  rr   c                   @   s   e Zd ZdS rC  ru   r   r   r   r   rú  Î  rr   zcallable.*is not supported)r¥   r  r3   rM  r_   r   r  )r9   r…   rú  r   r   r   Ú$test_signature_on_class_without_initÃ  s    0z8TestSignatureObject.test_signature_on_class_without_initc                 C   sÞ   d}|   tt tj¡ƒ|¡ G dd„ dtjƒ}G dd„ dƒ}G dd„ d||ƒ}|   tt |¡ƒ|¡ |   tt |¡ƒ|¡ 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, buffer_callback=None)c                   @   s   e Zd ZdS )z>TestSignatureObject.test_signature_on_builtin_class.<locals>.PNru   r   r   r   r   r—  Û  rr   r—  c                   @   s   e Zd ZdS )zGTestSignatureObject.test_signature_on_builtin_class.<locals>.EmptyTraitNru   r   r   r   r   Ú
EmptyTraitÜ  rr   rE  c                   @   s   e Zd ZdS )z?TestSignatureObject.test_signature_on_builtin_class.<locals>.P2Nru   r   r   r   r   ÚP2Ý  rr   rF  c                   @   s   e Zd Zdd„ ZdS )z?TestSignatureObject.test_signature_on_builtin_class.<locals>.P3c                 S   s   d S r   r   )r9   rQ   r   r   r   r®   â  s    zHTestSignatureObject.test_signature_on_builtin_class.<locals>.P3.__init__Nr&  r   r   r   r   ÚP3á  s   rG  r,  c                   @   s   e Zd Zdd„ ZdS )zBTestSignatureObject.test_signature_on_builtin_class.<locals>.MetaPc                 S   s   d S r   r   )r   r   r   r   r   r   r"  ç  s    zKTestSignatureObject.test_signature_on_builtin_class.<locals>.MetaP.__call__Nr  r   r   r   r   ÚMetaPæ  s   rH  c                   @   s   e Zd ZdS )z?TestSignatureObject.test_signature_on_builtin_class.<locals>.P4Nru   r   r   r   r   ÚP4é  s   rI  r”   z
(foo, bar))r¥   r  r3   rM  r<  r=  r_   )r9   rû  r—  rE  rF  rG  rH  rI  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   ƒ n1 s^0    Y  G dd„ d||ƒ}|   |  |ƒ ¡d¡ G d	d
„ d
ƒ}dd„ |_|   |  |¡d¡ ||_|  td¡ |  |¡ W d   ƒ n1 sê0    Y  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 r   r   r$  r   r   r   r"  ï  s    zLTestSignatureObject.test_signature_on_callable_objects.<locals>.Foo.__call__Nr  r   r   r   r   r  î  s   r  r'  c                   @   s   e Zd ZdS )zDTestSignatureObject.test_signature_on_callable_objects.<locals>.SpamNru   r   r   r   r   r  ö  s   r  rÚ  c                   @   s   e Zd ZdS )zCTestSignatureObject.test_signature_on_callable_objects.<locals>.BarNru   r   r   r   r   ÚBarû  s   rK  c                   @   s   e Zd ZdS )zGTestSignatureObject.test_signature_on_callable_objects.<locals>.WrappedNru   r   r   r   r   ÚWrapped  s   rL  c                 S   s   d S r   r   r4  r   r   r   rw     rr   zHTestSignatureObject.test_signature_on_callable_objects.<locals>.<lambda>úwrapper loop)r¥   rM  r   r0  r3   r!  r  )r9   r  r  rK  rL  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 r   r   r4  r   r   r   rw     rr   z?TestSignatureObject.test_signature_on_lambdas.<locals>.<lambda>)))r   r]  .r¯  .)r]  rª  rR   r   r   r   Útest_signature_on_lambdas  s    ÿz-TestSignatureObject.test_signature_on_lambdasc                 C   sL  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 )Nr­  c                S   s   d S r   r   r   r   r   r   r     rr   z8TestSignatureObject.test_signature_equality.<locals>.foor†   c                S   s   d S r   r   r   r   r   r   r     rr   z8TestSignatureObject.test_signature_equality.<locals>.barc                S   s   d S r   r   r   r   r   r   r     rr   rþ  c                S   s   d S r   r   r   r   r   r   r   %  rr   c                S   s   d S r   r   r   r   r   r   r   +  rr   rÒ  c                S   s   d S r   r   ©r   r   r   r   r   r   1  rr   c                 S   s   d S r   r   r   r   r   r   r   7  rr   c                 S   s   d S r   r   ©r‚   r   r   r   r   rQ   <  rr   z9TestSignatureObject.test_signature_equality.<locals>.spamc                 S   s   d S r   r   r   r   r   r   r   B  rr   c                 S   s   d S r   r   ©r   r‚   r   r   r   r   r   C  rr   r   r4  c                 S   s   d S r   r   r   r   r   r   r   I  rr   c                 S   s   d S r   r   rR  r   r   r   r   J  rr   c                S   s   d S r   r   ©Úposr   r‚   r   r   r   r   r   P  rr   c                S   s   d S r   r   ©rT  r   r‚   r   r   r   r   r   Q  rr   c                S   s   d S r   r   rS  r   r   r   r   W  rr   c                S   s   d S r   r   rU  r   r   r   r   X  rr   ©r²   c                _   s   d S r   r   )rT  r   r‚   r   r   r²   r   r   r   r   ^  rr   c                _   s   d S r   r   )rT  r   r‚   r   r   r²   r   r   r   r   _  rr   )
rš   r²  r8   r3   rM  r/   r	   r¥   Úhashr5  )r9   r   r   rQ   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   ƒ n1 sÆ0    Y  i dœdd„}|  	t
d¡ tt  |¡ƒ W d   ƒ n1 s0    Y  d S )Nc                 S   s   d S r   r   r4  r   r   r   r   i  rr   z8TestSignatureObject.test_signature_hashable.<locals>.foor   r+  rQ   ©rŠ  r   rÒ  c                 S   s   d S r   r   r4  r   r   r   r   r  rr   z8TestSignatureObject.test_signature_hashable.<locals>.barc                 S   s   d S r   r   r4  r   r   r   r   u  rr   úunhashable typec                 S   s   d S r   r   r4  r   r   r   r   y  rr   )r3   r/  r-  rM  ÚPOSITIONAL_OR_KEYWORDr¥   rW  r5  r•  r   r0  )r9   r–  r—  r   Úfoo_sigZ
manual_sigr   r   r   r   Útest_signature_hashablee  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¡ tt tttf dœdd„}|  tt |¡ƒd¡ ddlm	} tt |ttf dœdd„}|  tt |¡ƒd¡ d S )Nr   r™  r†   r2  c                [   s   d S r   r   ©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 r   r   )r   r‚   r   r   r²   r   r   r   r   ƒ  s    z.(a: int = 1, *args, b, c=None, **kwargs) -> 42c                   S   s   d S r   r   r   r   r   r   r   ˆ  s    r  c                 S   s   d S r   r   r4  r   r   r   r   Œ  s    z#(a: list[str]) -> tuple[str, float]r   )ÚTuplec                 S   s   d S r   r   r4  r   r   r   r   ’  s    z#(a: list[str]) -> Tuple[str, float])r   )r   )
rš   r¥   r  r3   rM  r~   rˆ  r²  r@  r_  )r9   r   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 r   r   )Úa_por‚   r²   r   r   r   r*  ›  s    zDTestSignatureObject.test_signature_str_positional_only.<locals>.testr   r  r+  z(a_po, /, *, b, **kwargs)r   z(foo, /)r   z(foo, /, **bar)z(foo, /, *bar))r3   r-  r/  rM  r~   r$   r‰  r•  r.  r0  r¥   r  r  ÚVAR_POSITIONAL)r9   r—  r–  r*  rŒ  r  r   r   r   Ú"test_signature_str_positional_only—  s2    
ÿÿ

þý

þý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 r   r   r   r   r   r   r*  ´  s    z=TestSignatureObject.test_signature_replace_anno.<locals>.testrY  )r3   rM  r•  r¾   rŠ  r„  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__p1re  c                S   s   d S r   r   )r9   rf  re  r   r   r   r   Â  s    zJTestSignatureObject.test_signature_on_mangled_parameters.<locals>.Spam.fooN)r   r‘   r   r   r   r   r  Á  s   r  c                   @   s   e Zd ZdS )zETestSignatureObject.test_signature_on_mangled_parameters.<locals>.HamNru   r   r   r   r   ÚHamÄ  s   rg  ))r  )rf  r   r   r¯  )re  rº   r   r±  .)r¥   rM  r   )r9   r  rg  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„}| |¡}|  ||¡ d S )Nc                   @   s   e Zd ZdS )zPTestSignatureObject.test_signature_from_callable_python_obj.<locals>.MySignatureNru   r   r   r   r   r  Ñ  rr   r  r   rþ  c                S   s   d S r   r   r   r   r   r   r   Ò  rr   zHTestSignatureObject.test_signature_from_callable_python_obj.<locals>.foo©r3   r/  ræ  ÚassertIsInstance©r9   r  r   r\  r   r   r   Ú'test_signature_from_callable_python_objÐ  s    
z;TestSignatureObject.test_signature_from_callable_python_objc                 C   s:   G dd„ dt jƒ}G dd„ dƒ}| |¡}|  ||¡ d S )Nc                   @   s   e Zd ZdS )zKTestSignatureObject.test_signature_from_callable_class.<locals>.MySignatureNru   r   r   r   r   r  Ø  rr   r  c                   @   s   e Zd ZdS )zCTestSignatureObject.test_signature_from_callable_class.<locals>.fooNru   r   r   r   r   r   Ù  rr   r   ri  rk  r   r   r   Ú"test_signature_from_callable_classÖ  s    
z6TestSignatureObject.test_signature_from_callable_classc                 C   s.   G dd„ dt jƒ}| tj¡}|  ||¡ d S )Nc                   @   s   e Zd ZdS )zQTestSignatureObject.test_signature_from_callable_builtin_obj.<locals>.MySignatureNru   r   r   r   r   r  à  rr   r  )r3   r/  ræ  r<  r=  rj  )r9   r  rŒ  r   r   r   Ú(test_signature_from_callable_builtin_objÝ  s    z<TestSignatureObject.test_signature_from_callable_builtin_objc                 C   sb   t ƒ D ]6}t |¡}t|jƒ}t|ƒ}|  |¡ |  ||¡ qt t¡}t|jƒ}|  |t	¡ d S r   )
r)   r3   rM  r~   r$   rJ  r/   r¥   r,   rK  rL  r   r   r   Ú3test_signature_definition_order_preserved_on_kwonlyä  s    





zGTestSignatureObject.test_signature_definition_order_preserved_on_kwonlyc                 C   s0   t  dd„ ¡j}t  dd„ ¡j}|  ||¡ d S )Nc                 S   s   d S r   r   r  r   r   r   rw   ð  rr   zITestSignatureObject.test_signater_parameters_is_ordered.<locals>.<lambda>c                 S   s   d S r   r   )rË   r‹   r   r   r   rw   ñ  rr   )r3   rM  r$   r5  )r9   Zp1Úp2r   r   r   Ú#test_signater_parameters_is_orderedï  s    z7TestSignatureObject.test_signater_parameters_is_orderedN)1r0   r?   r@   rV  rM  r˜  r¦  r¨  r¬  r°  r³  r·  rÂ  r   r¬   rS  r   rÑ  rØ  rÙ  rÛ  rç  rè  rí  rï  ró  rô  r
  r  r  r"  r9  r=  rA  rD  rJ  rN  rO  rX  r]  r`  rc  rd  rh  rl  rm  rn  ro  rq  r   r   r   r   rƒ  Y  sz   
0#ÿFÿ

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ƒv ¡ d S )Nr.  )r3   r-  r/   r.  r[  rb  ÚKEYWORD_ONLYr  r¥   r  ri  )r9   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   ƒ n1 s„0    Y  |  
td¡" t jdt jjd W d   ƒ n1 sÂ0    Y  |  
td	¡" t jd t jjd W d   ƒ n1 s0    Y  |  
td
¡" t jdt jjd W d   ƒ n1 sB0    Y  |  
td
¡" t jdt jjd W d   ƒ n1 s‚0    Y  |  
td¡$ t jddt jjd W d   ƒ n1 sÄ0    Y  |  
td¡$ t jddt jjd W d   ƒ n1 s0    Y  t jddt jjd}|  
td¡  |jt jjd W d   ƒ n1 sX0    Y  |  t|ƒ d¡¡ |  dt|ƒv ¡ d S )Nr   r]  ©r  r  z)value '123' is not a valid Parameter.kindZ123znot a valid parameter namerU  r  úname must be a strzis not a valid parameter nameú$z.azcannot have default valuesr   r†   z
<Parameterz"a=42")r3   r-  r.  r¥   rF  r  r¾   r…  r„  r  r   r  r  r0  rb  r[  r•  r/   ri  r2  ©r9   r&   r   r   r   Útest_signature_parameter_objectþ  sH    ÿ.02ÿ2ÿ2ÿ&ÿ&ÿ0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   r  r†   r  )r3   r-  r.  r¥   rW  r5  r•  rb  )r9   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†   ru  )r3   r-  rs  r/   r8   r	   )r9   r—  r&   r   r   r   Ú!test_signature_parameter_equality1  s    ÿ
ÿz5TestParameterObject.test_signature_parameter_equalityc                 C   s–  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   ƒ n1 s¾0    Y  |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   ƒ n1 sn0    Y  |j|jd}|  ||¡ d S )Nr   r†   ru  r   )r…  r   r”  zname is a required attribute)rF  r  z<value <class 'inspect._empty'> is not a valid Parameter.kindr  )r3   r-  rs  rU  r•  r¥   r…  r„  rF  r5  r   r  r¾   r  r[  r  )r9   r&   rp  r   r   r   Ú test_signature_parameter_replaceA  s<    ÿÿ,ÿ.z4TestParameterObject.test_signature_parameter_replacec                 C   sB   |   td¡" tjd tjjd W d   ƒ n1 s40    Y  d S )Nrv  r  )r   r0  r3   r-  r.  rR   r   r   r   Ú(test_signature_parameter_positional_onlyi  s    z<TestParameterObject.test_signature_parameter_positional_onlyc                 C   st   |   td¡" tjdtjjd W d   ƒ n1 s40    Y  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.0r  Z	implicit0)	r   r  r3   r-  r.  r[  r¥   r  rF  )r9   r†  r   r   r   Ú!test_signature_parameter_implicitm  s    ÿ0ÿz5TestParameterObject.test_signature_parameter_implicitc                 C   sv   t jdt jjd}|  t¡ d|_W d   ƒ n1 s80    Y  |  t¡ d|_W d   ƒ n1 sh0    Y  d S )NrQ   r  r   r  )r3   r-  rs  r/  r8  r   r  rx  r   r   r   Ú%test_signature_parameter_immutabilityz  s
    $z9TestParameterObject.test_signature_parameter_immutabilityN)r0   r?   r@   rt  ry  rz  r{  r|  r}  r   r~  r  r   r   r   r   rr  õ  s   *	(
rr  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d„ ZdS ) ÚTestSignatureBindc                 O   s,   t  | ¡}|j|i |¤Ž}| |ji |j¤ŽS r   )r3   rM  r  r   r²   )r£  r   r²   rŒ  r  r   r   r   Úcall…  s    
zTestSignatureBind.callc                 C   sÌ   dd„ }|   |  |¡d¡ |  td¡ |  |d¡ W d   ƒ n1 sH0    Y  |  td¡  | j|ddd W d   ƒ n1 s„0    Y  |  td¡ | j|dd W d   ƒ n1 s¾0    Y  d S )	Nc                   S   s   dS rQ  r   r   r   r   r   r*  Œ  s    z9TestSignatureBind.test_signature_bind_empty.<locals>.testr†   útoo many positional argumentsr   r]  rR  ú)got an unexpected keyword argument 'spam'©r¥   r  r   r0  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 r   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¥   r  r«  r   r   r   Útest_signature_bind_var™  s     
ÿz)TestSignatureBind.test_signature_bind_varc                 C   sV  dd„ }|   |  |ddd¡d¡ |  td¡" |  |dddd¡ W d   ƒ n1 sT0    Y  |  td	¡ |  |d¡ W d   ƒ n1 sŒ0    Y  |  td
¡ |  |¡ W d   ƒ n1 sÂ0    Y  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 r   r   r   r   r   r   r*  §  s    z=TestSignatureBind.test_signature_bind_just_args.<locals>.testr   r   rº   r  r‚  r  z missing a required argument: 'b'z missing a required argument: 'a'r]  c                 S   s
   | ||fS r   r   r   r   r   r   r*  ·  s    )r   r   r]  c                 S   s
   | ||fS r   r   r   r   r   r   r*  ¼  s    r  rP  )r]  r   r  r4  )r]  r   rº   rþ  )r   r]  rº   )r]  )r   r   rº   r„  r«  r   r   r   Útest_signature_bind_just_args¦  s&    0ÿ*ÿ(

z/TestSignatureBind.test_signature_bind_just_argsc                 C   s6   dd„ }|   |  |¡d¡ |   |  |ddd¡d¡ d S )Nc                  W   s   | S r   r   rí  r   r   r   r*  Ã  s    zATestSignatureBind.test_signature_bind_varargs_order.<locals>.testr   r   r   rº   r  r‡  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   ƒ n1 s¢0    Y  d S )Nrº   c                 W   s   | |||fS r   r   )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   rQ  )r   r   rº   r   rþ  z multiple values for argument 'c'r™  )rº   r„  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 r   r   rV  r   r   r   r*  ×  s    z?TestSignatureBind.test_signature_bind_just_kwargs.<locals>.testr   r  ©r   rQ   r‡  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 r   r   r^  r   r   r   r*  ß  s    zCTestSignatureBind.test_signature_bind_args_and_kwargs.<locals>.testr   r   r   r  rŒ  )r‚   r   r   rQ   )r   r‚   r   rQ   )r‚   r   rQ   r  )r‚   r   r   rQ   r­  r   r—   )r   r   r‚   )rº   r‡  r«  r   r   r   Ú#test_signature_bind_args_and_kwargsÞ  s.    
ÿÿÿÿÿÿ
ÿz5TestSignatureBind.test_signature_bind_args_and_kwargsc              	   C   s   dd„ }|   td¡ |  |d¡ W d   ƒ n1 s60    Y  |  | j|ddd¡ ddœdd„}|   td¡ |  |d¡ W d   ƒ n1 s’0    Y  dd„ }|  | j|dd	d
d¡ |  | j|d	ddd¡ |   td¡" | j|d	ddd W d   ƒ n1 s
0    Y  |   td¡ |  |dd	¡ W d   ƒ n1 sF0    Y  |   td¡" | j|dd	d	d
 W d   ƒ n1 s†0    Y  |   td¡" | j|dd	dd W d   ƒ n1 sÆ0    Y  |   td¡ |  |d¡ W d   ƒ n1 s 0    Y  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   ƒ n1 sÊ0    Y  |  | j|dd	ddddd	dddœf¡ d S )Nc                 S   s   | S r   r   r­  r   r   r   r*  ó  s    z:TestSignatureBind.test_signature_bind_kwonly.<locals>.testr‚  r   r­  c                S   s   |S r   r   )r   r   r   r   r   r   r*  ú  s    z"missing a required argument: 'bar'c                S   s   | |fS r   r   ©r   r   r   r   r   r*     s    r   r8  r†  )r   r   rƒ  r]  )r   r   rQ   r  )r   rQ   c                [   s
   | ||fS r   r   )r   r   Úbinr   r   r   r*    s    r  rQ   )rQ   r   r   z"missing a required argument: 'foo')rQ   r   )r   r  rQ   )r  rQ   )r   r0  r  r¥   r«  r   r   r   Útest_signature_bind_kwonlyò  sd    ÿ*ÿ*ÿ2ÿ.ÿ2ÿ2ÿ,ÿÿÿ0ÿ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 r   r   )r   r‚   r   r   r²   r   r   r   r*  *  s    z=TestSignatureBind.test_signature_bind_arguments.<locals>.testr]  rÿ  ri  rp  r  é<   )r‚   r   r   r²   ©r   r]  )r   )rÿ  )r‚   ri  r²   )r   r   r²   )r]  rÿ  )	r3   rM  r  r¥   rˆ  Ú	argumentsÚitemsr²   r   ©r9   r*  rŒ  r  r   r   r   Útest_signature_bind_arguments)  s    
ÿÿÿz/TestSignatureBind.test_signature_bind_argumentsc              
   C   s¤  t j}dddœdd„}t  |¡}t t|j ¡ ƒ¡}dD ]}|| j|j	d||< q8|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   ƒ n1 s0    Y  |  td¡" | j|d
ddd W d   ƒ n1 sX0    Y  |  td¡  | j|d
dd W d   ƒ n1 s–0    Y  d S )Nrº   r†   r  r8  c                [   s   | |||||fS r   r   )ra  Úb_poÚc_por   r   r²   r   r   r   r*  :  s    zCTestSignatureBind.test_signature_bind_positional_only.<locals>.test)ra  r™  rš  r  r+  r   r   r  r—   é   r  zbut was passed as a keywordr]  )r   r   rš  zparameter is positional only)rš  )ra  r™  )rº   r†   )r3   r-  rM  r£  r¤  rˆ  r$   r–  r•  r.  r‰  r0  r¥   r  r   r0  )r9   r—  r*  rŒ  r  rF  Znew_sigr   r   r   Ú#test_signature_bind_positional_only7  s.    
ÿÿÿ62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 r   r   )r   r9   r‚   r   r   r   r*  X  s    zATestSignatureBind.test_signature_bind_with_self_arg.<locals>.testr   r   rº   r  r)  )r3   rM  r  r¥   r   r—  r   r   r   Ú!test_signature_bind_with_self_argV  s    
z3TestSignatureBind.test_signature_bind_with_self_argc                 C   s¢   dd„ }t  |¡}|  td¡ |jddd W d   ƒ n1 sB0    Y  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 r   r   ©r   r   r   r   r   r*  a  s    z?TestSignatureBind.test_signature_bind_vararg_name.<locals>.testz)got an unexpected keyword argument 'args'r   r   rž  c                  _   s   | |fS r   r   r¹  r   r   r   r*  j  s    rí  r   r   r²   )r3   rM  r   r0  r  r¥   r  r•  r—  r   r   r   Útest_signature_bind_vararg_name`  s    
ÿ,
z1TestSignatureBind.test_signature_bind_vararg_namec                 C   sH   dd„ }|j jd }t |i ¡}ttdƒƒ}|  |  ||¡h d£¡ 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>v  rr   zWTestSignatureBind.test_signature_bind_implicit_arg.<locals>.make_set.<locals>.<setcomp>r—   rL   r   r   r   r   Úmake_setu  s    zDTestSignatureBind.test_signature_bind_implicit_arg.<locals>.make_setr   r—   >   r   r   r  r«   r´   )rE  Ú	co_constsr^   ÚFunctionTypeÚiterr   r¥   r  )r9   r¡  Zsetcomp_codeZsetcomp_funcÚiteratorr   r   r   Ú test_signature_bind_implicit_argr  s
    z2TestSignatureBind.test_signature_bind_implicit_argc                 C   sH   dd„ }t  |¡}|jddd}|  |jddi¡ |  d|j ¡ ¡ d S )Nc                [   s   | |  | ¡fS r   )rL  )r   r²   r   r   r   r   ~  s    zATestSignatureBind.test_signature_bind_posonly_kwargs.<locals>.fooúpos-onlyÚkeywordr8  r   )r   r§  )r3   rM  r  r¥   r²   r‰   r•  r–  )r9   r   rŒ  Úresultr   r   r   Ú"test_signature_bind_posonly_kwargs}  s
    
z4TestSignatureBind.test_signature_bind_posonly_kwargsN)r0   r?   r@   rV  r  r…  rˆ  r‰  rŠ  r‹  r  rŽ  r‘  r˜  rœ  r  rŸ  r   r¦  rª  r   r   r   r   r€  „  s"   
7


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 )ÚTestBoundArgumentsc                 C   sP   dd„ }t  |¡ d¡}|  td¡ t|ƒ W d   ƒ n1 sB0    Y  d S )Nc                 S   s   d S r   r   r4  r   r   r   r   Š  rr   zITestBoundArguments.test_signature_bound_arguments_unhashable.<locals>.foor   rZ  )r3   rM  r  r   r0  rW  ©r9   r   r  r   r   r   Ú)test_signature_bound_arguments_unhashable‰  s    z<TestBoundArguments.test_signature_bound_arguments_unhashablec           	      C   sP  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 r   r   r4  r   r   r   r   ‘  rr   zGTestBoundArguments.test_signature_bound_arguments_equality.<locals>.foor   r   r   c                 S   s   d S r   r   rþ  r   r   r   r   £  rr   zGTestBoundArguments.test_signature_bound_arguments_equality.<locals>.barc                 S   s   d S r   r   r   r   r   r   r   ¨  rr   r   rQ  )r3   rM  r  r/   r8   r	   r•  )	r9   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
}ttjd ƒD ]N}| j|d. t t ||¡¡}|  	||¡ W d   ƒ qB1 s†0    Y  qBd S )Nr™  r   r†   r  rš  c                [   s   d S r   r   r›  r   r   r   r   °  rr   zETestBoundArguments.test_signature_bound_arguments_pickle.<locals>.foorÿ  ri  r’  )rœ  )
r3   rM  r  r   rž  rŸ  r   r¡  r¢  r¥   )r9   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 )Nr™  r   r†   r  rš  c                [   s   d S r   r   r›  r   r   r   r   º  rr   zCTestBoundArguments.test_signature_bound_arguments_repr.<locals>.foorÿ  ri  r’  z <BoundArguments \(a=20,.*\}\}\)>)r3   rM  r  ZassertRegexri  ©r9   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 r   r   )r   r‚   r   r   r‹  r   r   r   r   À  rr   zMTestBoundArguments.test_signature_bound_arguments_apply_defaults.<locals>.foorÿ  )r   rÿ  )r‚   r   )r   r   r   r‹  r]  ri  )rÖ   r”  )r‚   rÿ  )r   )ri  rÖ   c                 S   s   d S r   r   r   r   r   r   r   Ó  rr   c                   S   s   d S r   r   r   r   r   r   r   Ü  rr   rQ   c                 S   s   d S r   r   r4  r   r   r   r   ã  rr   )r   rQ   )r   )rQ   )	r3   rM  r  Zapply_defaultsr¥   r~   r•  r–  Zbind_partialr°  r   r   r   Ú-test_signature_bound_arguments_apply_defaults¿  s@    

þþ

þ


z@TestBoundArguments.test_signature_bound_arguments_apply_defaultsc                 C   s.   dd„ }t  |¡ d¡}|  t|jƒt¡ d S )Nc                 S   s   d S r   r   r4  r   r   r   r   ê  rr   zMTestBoundArguments.test_signature_bound_arguments_arguments_type.<locals>.foor   )r3   rM  r  r¾   r_   r•  r‡   r¬  r   r   r   Ú-test_signature_bound_arguments_arguments_typeé  s    z@TestBoundArguments.test_signature_bound_arguments_arguments_typeN)	r0   r?   r@   r­  r®  r¯  r±  r²  r³  r   r   r   r   r«  ˆ  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)r9   z($self, obj)z($cls, /, obj)r   )r3   Z_signature_get_bound_paramr¥   )r9   Úgetterr   r   r   Útest_signature_get_bound_paramï  s    z:TestSignaturePrivateHelpers.test_signature_get_bound_paramc                 C   s8   t  |¡\}}}|  ||¡ |  ||¡ |  ||¡ d S r   )r3   Z"_signature_strip_non_python_syntaxr¥   )r9   ÚinputZclean_signatureZself_parameterZ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¸  rR   r   r   r   Ú&test_signature_strip_non_python_syntax   sT    úüüüüüüzBTestSignaturePrivateHelpers.test_signature_strip_non_python_syntaxN)r0   r?   r@   r¶  r¸  r¹  r   r   r   r   r´  î  s   
r´  c                   @   s4   e Zd Zee ed¡dd„ ƒƒZdd„ Zdd„ Z	dS )	ÚTestSignatureDefinitionsr9  c           
   	   C   s  t ƒ }h d£}||O }dh}||O }h d£}||O }ddh}||O }t ƒ }ttƒ}t| ¡ ƒD ]t\}}	t|	ƒspq^t|	tƒrŒ||vrŒ| |¡ ||v r–q^| j	|d  |  
t |	¡¡ W d   ƒ q^1 sÈ0    Y  q^|D ]>}| j	|d |  |	j¡ W d   ƒ qØ1 s0    Y  qØd S )N>   re  rg  ra  r¤  ÚsliceÚvarsr   Úround>   Ú
breakpointrÏ  Ú__build_class__Úmaxrº  rÝ   Ú
__import__)rF  )r2   r¼  r  rJ  r–  Úcallablerh  r_   rÏ  r   ÚassertIsNotNoner3   rM  r  Ú__text_signature__)
r9   Zno_signatureZneeds_groupsZneeds_semantic_updateZneeds_varargsZnot_converted_yetZtypes_with_signaturesrO  rF  r<   r   r   r   Útest_builtins_have_signatures1  s.    
0z6TestSignatureDefinitions.test_builtins_have_signaturesc                 C   sV   dd„ }d|_ t |¡}|  |¡ |  t|ƒd¡ d|_ t |¡}|  t|ƒd¡ d S )Nc                  _   s   d S r   r   r¹  r   r   r   r£  f  s    zNTestSignatureDefinitions.test_python_function_override_signature.<locals>.funcz(($self, a, b=1, *args, c, d=2, **kwargs)z*(self, /, a, b=1, *args, c, d=2, **kwargs)z+($self, a, b=1, /, *args, c, d=2, **kwargs)z*(self, a, b=1, /, *args, c, d=2, **kwargs))rÄ  r3   rM  rÃ  r¥   r  )r9   r£  rŒ  r   r   r   Ú'test_python_function_override_signaturee  s    


z@TestSignatureDefinitions.test_python_function_override_signaturec                 C   sL   ddl m} G dd„ d|ƒ}|j}|  |d¡ t |¡}|  t|ƒd¡ d S )Nr   )ÚBufferedReaderc                   @   s   e Zd ZdZdS )zVTestSignatureDefinitions.test_base_class_have_text_signature.<locals>.MyBufferedReaderzbuffer reader class.N)r0   r?   r@   rò   r   r   r   r   ÚMyBufferedReaders  s   rÈ  z&(raw, buffer_size=DEFAULT_BUFFER_SIZE)z(raw, buffer_size=8192))Ztest.ann_module7rÇ  rÄ  r¥   r3   rM  r  )r9   rÇ  rÈ  Ztext_signaturerŒ  r   r   r   Ú#test_base_class_have_text_signaturep  s    
z<TestSignatureDefinitions.test_base_class_have_text_signatureN)
r0   r?   r@   r   r¬   rS  r   rÅ  rÆ  rÉ  r   r   r   r   rº  -  s   ÿ1rº  c                   @   s    e Zd Zdd„ Zedd„ ƒZdS )ÚNTimesUnwrappablec                 C   s   || _ d | _d S r   )rÇ  Ú_next)r9   rÇ  r   r   r   r®   }  s    zNTimesUnwrappable.__init__c                 C   s2   | j dkrtdƒ‚| jd u r,t| j d ƒ| _| jS )Nr   zUnwrapped too many timesr   )rÇ  r[   rË  rÊ  rR   r   r   r   r!    s
    

zNTimesUnwrappable.__wrapped__N)r0   r?   r@   r®   r9  r!  r   r   r   r   rÊ  |  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 r   r   r   r   r   r   r£  Œ  s    z(TestUnwrap.test_unwrap_one.<locals>.funcrÿ  )rÊ  )rk   Ú	lru_cacher¾   r3   Úunwrap)r9   r£  rÓ  r   r   r   Útest_unwrap_one‹  s    zTestUnwrap.test_unwrap_onec                 C   sP   dd„ }|}t dƒD ]}t |¡dd„ ƒ}q|  |j|¡ |  t |¡|¡ d S )Nc                 S   s   | | S r   r   r   r   r   r   r£  ’  s    z,TestUnwrap.test_unwrap_several.<locals>.funcr]  c                   S   s   d S r   r   r   r   r   r   rÓ  –  s    z/TestUnwrap.test_unwrap_several.<locals>.wrapper)r   rk   r#  rU  r!  r¾   r3   rÎ  )r9   r£  rÓ  Ú__r   r   r   Útest_unwrap_several‘  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 r   r   r   r   r   r   Úfunc1  s    z#TestUnwrap.test_stop.<locals>.func1c                   S   s   d S r   r   r   r   r   r   Úfunc2Ÿ  s    z#TestUnwrap.test_stop.<locals>.func2c                   S   s   d S r   r   r   r   r   r   rÓ  ¢  s    z%TestUnwrap.test_stop.<locals>.wrapperr   c                 S   s
   t | dƒS )NÚ	stop_hererã  r   r   r   r   rw   §  rr   z&TestUnwrap.test_stop.<locals>.<lambda>)Ústop)rk   r#  rÔ  r3   rÎ  r¾   )r9   rÒ  rÓ  rÓ  Z	unwrappedr   r   r   Ú	test_stopœ  s    

ÿzTestUnwrap.test_stopc                 C   sÈ   dd„ }||_ |  td¡ t |¡ W d   ƒ n1 s:0    Y  dd„ }||_ ||_ |  td¡ t |¡ W d   ƒ n1 s„0    Y  |  td¡ t |¡ W d   ƒ n1 sº0    Y  d S )Nc                   S   s   d S r   r   r   r   r   r   rÒ  «  rr   z$TestUnwrap.test_cycle.<locals>.func1rM  c                   S   s   d S r   r   r   r   r   r   rÓ  °  rr   z$TestUnwrap.test_cycle.<locals>.func2)r!  r   r  r3   rÎ  )r9   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 r   r   r   r   r   r   r£  ¹  rr   z(TestUnwrap.test_unhashable.<locals>.funcc                       s   e Zd ZdZ” ZdS )z%TestUnwrap.test_unhashable.<locals>.CN)r0   r?   r@   Ú__hash__r!  r   rÙ  r   r   r…   »  s   r…   )r!  r  r3   rÎ  )r9   r…   r   rÙ  r   Útest_unhashable¸  s    zTestUnwrap.test_unhashablec                 C   sJ   t t ¡ d ƒ}|  td¡ t |¡ W d   ƒ n1 s<0    Y  d S )Nr   rM  )rÊ  r  Úgetrecursionlimitr   r  r3   rÎ  )r9   r<   r   r   r   Útest_recursion_limitÀ  s    zTestUnwrap.test_recursion_limitN)	r0   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u 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¬   ú-mr3   r   rr   )Ú	importlibÚimport_moduler
   ÚdecoderJ  r¥   r3   rë   )r9   ÚmoduleÚrcr+   Úerrré   r   r   r   Útest_only_sourceÆ  s    
ÿ
zTestMain.test_only_sourcec                 C   sF   dd„ }d|_ |  t¡ t |¡ W d   ƒ n1 s80    Y  d S )Nc                   S   s   d S r   r   r   r   r   r   r   Ð  s    z)TestMain.test_custom_getattr.<locals>.foor†   )r0  r/  r0  r3   rM  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 )NrÝ  r3   z%concurrent.futures:ThreadPoolExecutorr   rr   )r
   rà  rJ  r¥   r3   rë   r   )r9   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¬   rÝ  r3   r  z#Can't get info for builtin modules.)rÞ  rß  r   rà  rJ  r¥   )r9   rá  r"  r+   rã  ré   r   r   r   Útest_builtinsá  s    
ÿ
zTestMain.test_builtinsc                 C   sx   t  d¡}t ¡ }tg |¢d‘d‘d‘d‘R Ž \}}}| ¡ }|  |j|¡ |  |j|¡ |  |j	|¡ |  
|d¡ d S )Nr¬   rÝ  r3   z	--detailsrr   )rÞ  rß  r   Z!optim_args_from_interpreter_flagsr
   rà  r‰   r0   rÂ   Ú
__cached__r¥   )r9   rá  r   râ  r+   rã  Úoutputr   r   r   Útest_detailsè  s    
ÿÿzTestMain.test_details)r0   r?   r@   rä  rå  r¬   rS  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   sR   t  |¡}t|ƒ,}|  | ¡  d¡| d¡¡ W d   ƒ n1 sD0    Y  d S rÝ  )r3   rë   rÝ   r¥   rà   rJ  )r9   rß  rá   Zinspected_srcr¡  r   r   r   ÚassertInspectEqual  s    

þzTestReload.assertInspectEqualc              	   C   sŒ   t d| jƒl\}}t |¡}|  ||¡ t|dƒ}| | j¡ W d   ƒ n1 sT0    Y  |  ||¡ W d   ƒ n1 s~0    Y  d S )NZ
reload_bugrÛ  )r   Ú
src_beforerÞ  rß  rì  rÝ   rá  Ú	src_after)r9   rF  rß  rá  r¡  r   r   r   Útest_getsource_reload	  s    
*z TestReload.test_getsource_reloadN)	r0   r?   r@   ÚtextwrapÚdedentrí  rî  rì  rï  r   r   r   r   rë  õ  s   

rë  Ú__main__)cr  r£  rf   rk   rÞ  r3   r?  r)  rÝ  Zos.pathr   r<  rž  rå  r  r^   rð  r™  r¬   Zunittest.mockrc   Úconcurrent.futuresr   ÚImportErrorZtest.supportr   r   r   r   r	   Ztest.support.script_helperr
   r   r*  r   rX   r   r  r   Ztest.test_importr   rÂ   r½   rÙ  r   r÷   r¯   r)   r,   ræ   rK  r­   r-   rN   rO   rS   rz  rT   rU   r¨   rÜ   rí   ró   rV  rY  re  rz  r„  rÚ  r   rë  rñ  rö  r÷  r£  r»  r¸  rè  r  r  r  rZ  rw  r/  r  r-  r‚  rƒ  rr  r€  r«  r´  rº  rÊ  rÌ  rÜ  rë  r0   Úmainr   r   r   r   Ú<module>   sÎ   

 87 U
*l   R8z I  c@         %   f?O<0
