o
    HXîh¨² ã                   @   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ye   dZY nw d dlmZ d dlmZmZ d dlmZ d dl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) d dl#m*Z* d dl#m+Z+ d dl,m-Z- e%j.Z/e/ 0d¡rÀe/dd… Z/e
e/ƒZ/dd„ Z1e% 2¡ Z3dd„ Z4dd„ Z5d 6¡ Z7G dd„ dej8ƒZ9dd„ Z:dd„ Z;dd „ Z<ej=d!d"„ ƒZ>G d#d$„ d$e9ƒZ?G d%d&„ d&e9ƒZ@G d'd(„ d(ej8ƒZAG d)d*„ d*ƒZBG d+d,„ d,eAƒZCG d-d.„ d.ej8ƒZDG d/d0„ d0eAƒZEG d1d2„ d2eAƒZFG d3d4„ d4eAƒZGG d5d6„ d6eAƒZHG d7d8„ d8eAƒZIG d9d:„ d:eAƒZJG d;d<„ d<eAƒZKG d=d>„ d>eLƒZMG d?d@„ d@eLƒZNdAdB„ ZOG dCdD„ dDej8ƒZPG dEdF„ dFej8ƒZQG dGdH„ dHej8ƒZReLƒ ZSG dIdJ„ dJej8ƒZTG dKdL„ dLej8ƒZUG dMdN„ dNeUƒZVG dOdP„ dPeVƒZWG dQdR„ dRej8ƒZXG dSdT„ dTej8ƒZYG dUdV„ dVej8ƒZZG dWdX„ dXej[ƒZ\G dYdZ„ dZej]ƒZ^G d[d\„ d\ej8ƒZ_G d]d^„ d^ej8ƒZ`G d_d`„ d`ej8ƒZaG dadb„ dbej8ƒZbG dcdd„ ddej8ƒZcG dedf„ dfej8ƒZdG dgdh„ dhƒZeG didj„ djej8ƒZfG dkdl„ dlej8ƒZgG dmdn„ dnej8ƒZheidokrAe j¡  dS dS )pé    N©Únormcase)ÚThreadPoolExecutor)Úcpython_only)ÚMISSING_C_DOCSTRINGSÚ	ALWAYS_EQ)ÚDirsOnSysPath)ÚTESTFN)Úassert_python_okÚassert_python_failure)Úinspect_fodder)Úinspect_fodder2)Úsupport)Úinspect_stock_annotations)Úinspect_stringized_annotations)Ú inspect_stringized_annotations_2)Ú_ready_to_import)ÚcÚoéÿÿÿÿc                 G   s   t | ƒf| S ©Nr   )ÚfilenameÚargs© r   ú;/opt/python-3.10.19/usr/lib/python3.10/test/test_inspect.pyÚrevise<   ó   r   c                  c   s†    g d¢} t ddt| ƒ ƒD ]2}g }d}t t| ƒƒD ]}|||> @ r)| | | ¡ qd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_textÚsymbolsr   r   r   Ú5signatures_with_lexicographic_keyword_only_parametersB   s   €€÷r.   c                 C   ó   d S r   r   )ÚthrowÚoutZtheZbabyZwith_Zthe_Z	bathwaterr   r   r   Ú#unsorted_keyword_only_parameters_fnT   ó   r2   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 ]$}|tjks*|tjks*|tjkr0|tj	kr0q|  
||ƒd|j|f ¡ qd S )Nz%s(%s)z
not %s(%s))ÚevalÚ
assertTrueÚ__name__Ú
predicatesÚsetÚinspectÚisgeneratorfunctionÚisasyncgenfunctionÚiscoroutinefunctionÚ
isfunctionÚassertFalse)ÚselfÚ	predicateÚexpÚobjÚotherr   r   r   Úistestb   s   



úzIsTestBase.istestN)r7   Ú
__module__Ú__qualname__r9   r:   Ú	isbuiltinÚisclassÚiscodeÚisframer>   ÚismethodÚismoduleÚistracebackÚisgeneratorr;   Úiscoroutiner=   Ú
isasyncgenr<   r8   rE   r   r   r   r   r4   Z   s    ûr4   c                 c   s    t dƒD ]}|V  qd S ©Nr!   ©r#   ©r@   r)   r   r   r   Úgenerator_function_examplen   ó   €ÿrU   c                 C  s$   t dƒ2 z	3 d H W }|V  q6 d S rR   rS   rT   r   r   r   Ú async_generator_function_exampler   s   €ÿrW   c                 Ã   s   dS ©NÚspamr   ©r@   r   r   r   Úcoroutine_function_examplev   s   €r[   c                 c   s    d V  dS rX   r   rZ   r   r   r   Úgen_coroutine_function_exampley   s   €r\   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¡ zGzdd  W n< tyX } z0|ja|   tjd¡ |   tjd¡ t	t
dƒrB|   tjd	¡ n|  t ttjƒj¡¡ W Y d }~nd }~ww W d and aw |   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 ¡  t d¡ |   tjd¡ |   tjd¡ W d   ƒ n1 sÈw   Y  t	t
dƒrÛ|   tjd¡ d S |  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))rU   z#async_generator_function_example(1)rW   Úignorezcoroutine_function_example(1)r[   ÚMemberDescriptorTypezdatetime.timedelta.days)!rE   r:   rH   rJ   Ú	ExceptionÚ__traceback__r^   rK   rN   ÚhasattrÚtypesZisgetsetdescriptorr?   ÚtypeÚtb_frameÚf_localsr>   rL   rM   ÚisdatadescriptorrO   r;   rQ   r<   ÚwarningsÚcatch_warningsÚsimplefilterrP   r=   ZismemberdescriptorÚdatetimeZ	timedeltaZdays©r@   Úer   r   r   Útest_excluding_predicates€   sP   
ÿ€ø€ÿÿ

ý
z(TestPredicates.test_excluding_predicatesc              	   C   sì  t dƒ}tdƒ}tdƒ}|  t t¡¡ |  t t t t¡¡¡¡ |  t |¡¡ |  	t 
t¡¡ |  	t 
t t t¡¡¡¡ |  	t |¡¡ |  t tj ¡ ¡¡ |  	t tj ¡ ¡¡ |  	t t¡¡ |  	t t t t¡¡¡¡ |  	t |¡¡ |  t 
tj ¡ ¡¡ |  t 
tj ¡ ¡¡ |  t 
t¡¡ |  t 
t t t¡¡¡¡ |  t |¡¡ |  t tj ¡ ¡¡ |  t tj ¡ ¡¡ |  t t¡¡ |  	t t ¡¡ |  	t t t t ¡¡¡¡ |  	t |¡¡ | ¡  | ¡  d S ©Nr    )rW   r\   r[   r?   r:   r=   Ú	functoolsÚpartialrP   r6   r;   rO   ÚunittestÚmockZMockZ	AsyncMockr<   rQ   Úclose)r@   Zasync_gen_coroÚgen_coroÚcoror   r   r   Útest_iscoroutineª   s    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzTestPredicates.test_iscoroutinec                 C   s¼   dd„ }|   t |ƒ ¡¡ tdƒ}tdƒ}|  t |¡¡ |  t |¡¡ G dd„ dƒ}|  t |ƒ ¡¡ |   t |¡¡ G dd„ dƒ}|ƒ }dd	„ |_|   t |¡¡ | ¡  | ¡  d S )
Nc                   s   ó    d V  d S r   r   r   r   r   r   Úgenè   s   €
 z,TestPredicates.test_isawaitable.<locals>.genr    c                   @   ó   e Zd Zdd„ ZdS )z/TestPredicates.test_isawaitable.<locals>.Futurec                   S   r/   r   r   r   r   r   r   Ú	__await__ò   ó   z9TestPredicates.test_isawaitable.<locals>.Future.__await__N)r7   rF   rG   r~   r   r   r   r   ÚFutureñ   ó    r€   c                   @   ó   e Zd ZdS )z2TestPredicates.test_isawaitable.<locals>.NotFutureN©r7   rF   rG   r   r   r   r   Ú	NotFuture÷   ó    r„   c                   S   r/   r   r   r   r   r   r   Ú<lambda>ù   ó    z1TestPredicates.test_isawaitable.<locals>.<lambda>)r?   r:   Zisawaitabler[   r\   r6   r~   rw   )r@   r|   ry   rx   r€   r„   Znot_futr   r   r   Útest_isawaitableç   s   
zTestPredicates.test_isawaitablec                 C   s(   |   t tj¡¡ |   t g j¡¡ d S r   )r6   r:   Z	isroutiner`   rY   ÚcountrZ   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                   @   r}   )z2TestPredicates.test_isclass.<locals>.CustomGetattrc                 S   r/   r   r   )r@   Úattrr   r   r   Ú__getattr__  r   z>TestPredicates.test_isclass.<locals>.CustomGetattr.__getattr__N)r7   rF   rG   rŒ   r   r   r   r   ÚCustomGetattr  r   r   )rE   r:   rI   r6   ÚlistÚobjectr?   )r@   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                   @   ó   e Zd ZdZdS )z/TestPredicates.test_get_slot_members.<locals>.C©r   ÚbN©r7   rF   rG   Ú	__slots__r   r   r   r   ÚC  ó    r–   é*   r   r“   )r   r   Údictr:   Ú
getmembersÚassertInÚassertNotIn)r@   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                       ó   e Zd Z” dd„ ƒZdS )z<TestPredicates.test_isabstract.<locals>.AbstractClassExamplec                 S   r/   r   r   rZ   r   r   r   r"     r3   z@TestPredicates.test_isabstract.<locals>.AbstractClassExample.fooN©r7   rF   rG   r"   r   ©r¢   r   r   ÚAbstractClassExample  s    r¦   ©Ú	metaclassc                   @   r}   )z4TestPredicates.test_isabstract.<locals>.ClassExamplec                 S   r/   r   r   rZ   r   r   r   r"     r   z8TestPredicates.test_isabstract.<locals>.ClassExample.fooNr¤   r   r   r   r   ÚClassExample  r   r©   é   )Úabcr¡   r¢   r6   r:   Ú
isabstractr?   Úint)r@   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%   r:   r¬   ©Úcls©Úisabstract_checksr   r   Ú__init_subclass__.  ó   z^TestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractChecker.__init_subclass__N)r7   rF   rG   r³   r   r±   r   r   ÚAbstractChecker-  s    rµ   r§   c                       r£   )zQTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractClassExamplec                 S   r/   r   r   rZ   r   r   r   r"   1  r3   zUTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractClassExample.fooNr¤   r   r¥   r   r   r¦   0  ó    r¦   c                   @   r}   )zITestPredicates.test_isabstract_during_init_subclass.<locals>.ClassExamplec                 S   r/   r   r   rZ   r   r   r   r"   5  r   zMTestPredicates.test_isabstract_during_init_subclass.<locals>.ClassExample.fooNr¤   r   r   r   r   r©   4  r   r©   TFc                   @   r‚   )zJTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractChildNrƒ   r   r   r   r   ÚAbstractChild:  ó    r·   c                   @   r‚   )zOTestPredicates.test_isabstract_during_init_subclass.<locals>.AbstractGrandchildNrƒ   r   r   r   r   ÚAbstractGrandchild<  r¸   r¹   c                   @   r‚   )zOTestPredicates.test_isabstract_during_init_subclass.<locals>.ConcreteGrandchildNrƒ   r   r   r   r   ÚConcreteGrandchild>  r¸   rº   )TTF)r«   r¡   r¢   ÚassertEqualÚclear)r@   r¡   rµ   r¦   r©   r·   r¹   rº   r   )r¢   r²   r   Ú$test_isabstract_during_init_subclass*  s   z3TestPredicates.test_isabstract_during_init_subclassN)r7   rF   rG   rq   rz   rˆ   rŠ   r   rŸ   r®   r½   r   r   r   r   r]   ~   s    *=		r]   c                   @   ó<   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é   é   é	   )ru   ÚTestCaseÚ__init__ÚgitÚabuse©r@   r   Úkwargsr   r   r   rÄ   D  s   zTestInterpreterStack.__init__c                 C   s    |   tjd¡ |   tjd¡ d S )Nz	git.ex[2]zmod.fr)rE   r:   rN   rK   rZ   r   r   r   Útest_abuse_doneI  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Â   rY   ú    eggs(b + d, c + f)
r!   é+   Úargueú            spam(a, b, c)
é   é'   rÆ   z        self.argue(a, b, c)
zinspect.stack())r6   r$   r`   Ústr»   r   ÚmodfileÚassertIsÚframeÚfrÚlinenor   Ú__file__Úfunctionr›   Úcode_contextÚindex)r@   Úrecordr   r   r   Ú
test_stackM  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Â   rY   rÌ   r!   é   rË   z    q = y / 0
)r»   r$   rÅ   Útrr   rÓ   rZ   r   r   r   Ú
test_trace`  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))r:   Úgetargvaluesr`   rÖ   r»   Úformatargvalues©r@   r   ÚvarargsÚvarkwÚlocalsr   r   r   Ú
test_framei  s   ÿzTestInterpreterStack.test_framec                 C   sZ   t  tjj¡\}}}}|  |g d¢¡ |  |d¡ |  |d¡ |  t  ||||¡d¡ d S )N©r   r“   r   Údrp   ÚfÚgÚhz-(a=7, b=8, c=9, d=3, e=4, f=5, *g=(), **h={}))r:   rä   r`   rÖ   Úf_backr»   rå   ræ   r   r   r   Útest_previous_framer  s   ÿz(TestInterpreterStack.test_previous_frameN)	r7   rF   rG   rÄ   rÉ   rÝ   rà   rê   rñ   r   r   r   r   r¿   C  s    		r¿   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )ÚGetSourceBaseNc                 C   sD   t t | j¡dd}| ¡ | _W d   ƒ d S 1 sw   Y  d S )Núutf-8©Úencoding)Úopenr:   ÚgetsourcefileÚfodderModuleÚreadÚsource)r@   Úfpr   r   r   ÚsetUp~  s   "ÿzGetSourceBase.setUpc                 C   s0   | j  d¡}d ||d |… ¡|rd S d S )NÚ
r    Ú )rú   Úsplitr&   )r@   ÚtopÚbottomÚlinesr   r   r   Úsourcerange‚  s   $zGetSourceBase.sourcerangec                 C   s   |   t |¡|  ||¡¡ d S r   )r»   r:   Ú	getsourcer  )r@   rC   r   r  r   r   r   ÚassertSourceEqual†  s   
ÿzGetSourceBase.assertSourceEqual)r7   rF   rG   rø   rü   r  r  r   r   r   r   rò   z  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)r7   rF   rG   Ú__doc__r•   r   r   r   r   r  Š  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   ó   g | ]}|d  ‘qS ©r    r   ©Ú.0r°   r   r   r   Ú
<listcomp>œ  ó    z<TestRetrievingSourceCode.test_getclasses.<locals>.<listcomp>r   c                 S   r  r  r   r  r   r   r   r  ¬  r  T)r:   rš   r`   rI   r»   r  r  r  r  r  Zgetclasstreer   )r@   Z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Ë   ÚlobbestrY   )r:   rš   r`   r>   r»   rË   r  rY   )r@   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»   r:   Úgetdocr`   r  rÅ   rÆ   r  r	  r
  rZ   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»   r:   r  r`   r  rÆ   ZcontradictionrZ   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   )r:   Z_finddocr»   r­   r  Úto_bytesÚ
from_bytesÚreal)r@   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»   r:   ZcleandocrZ   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»   r:   Zgetcommentsr`   r  Úmod2Úcls160ÚcompileÚassertIsNonerŽ   )r@   Ú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»   r:   Ú	getmoduler`   r  rÆ   ÚstrÚsysÚmodulesrÓ   rZ   r   r   r   Útest_getmoduleð  s   z'TestRetrievingSourceCode.test_getmodulec                 C   s^   dd„ }t j d|¡ t ¡ }|  t |¡¡ t |¡ W d   ƒ d S 1 s(w   Y  d S )Nc                 S   ó   t dƒ‚)Nzbad file)ÚFileNotFoundError)rC   Z	_filenamer   r   r   Ú_getabsfile   ó   zKTestRetrievingSourceCode.test_getmodule_file_not_found.<locals>._getabsfilezinspect.getabsfile)ru   rv   Úpatchr:   Úcurrentframer*  r.  Zgetouterframes)r@   r5  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.'
)r:   Zgetframeinforø   rÖ   r»   rÚ   )r@   Z
frame_infor   r   r   Ú test_getframeinfo_get_first_line  ó   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Æ   r`   r  r  rZ   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
= d S tj|j
= w )Nz2_non_existing_filename_used_for_sourcefile_test.pyr&  r'   r    ÚNone)r»   r   r:   r÷   r`   rY   rÓ   rÅ   rÆ   r)  Úco_filenameÚ	linecacheÚcache)r@   Úfnr+  r   r   r   Útest_getsourcefile  s   z+TestRetrievingSourceCode.test_getsourcefilec                 C   s   |   t tj¡tj¡ d S r   )r»   r:   Úgetfiler`   r  rØ   rZ   r   r   r   Útest_getfile  ó   z%TestRetrievingSourceCode.test_getfilec                 C   óN   |   t¡}t t¡ W d   ƒ n1 sw   Y  |  t|jƒ d¡¡ d S )Nz<module)	ÚassertRaisesÚ	TypeErrorr:   rI  r0  r6   r/  Ú	exceptionÚ
startswithro   r   r   r   Útest_getfile_builtin_module   ó   ÿz4TestRetrievingSourceCode.test_getfile_builtin_modulec                 C   rL  )Nz<class)	rM  rN  r:   rI  r­   r6   r/  rO  rP  ro   r   r   r   Útest_getfile_builtin_class%  rR  z3TestRetrievingSourceCode.test_getfile_builtin_classc                 C   s’   |   t¡}t t¡ W d   ƒ n1 sw   Y  |  dt|jƒ¡ |   t¡}t tj	¡ W d   ƒ n1 s9w   Y  |  dt|jƒ¡ d S )Nzexpected, got)
rM  rN  r:   rI  Úabsr›   r/  rO  rŽ   r%   )r@   Ze_absZe_appendr   r   r   Ú'test_getfile_builtin_function_or_method*  s   ÿÿz@TestRetrievingSourceCode.test_getfile_builtin_function_or_methodc                 C   s\   G dd„ dt ƒ}G dd„ d|d}|  t¡ t |¡ W d   ƒ d S 1 s'w   Y  d S )Nc                   @   s   e Zd Zedd„ ƒZdS )zFTestRetrievingSourceCode.test_getfile_class_without_module.<locals>.CMc                 S   ó   t ‚r   ©ÚAttributeErrorr¯   r   r   r   rF   4  r3   zQTestRetrievingSourceCode.test_getfile_class_without_module.<locals>.CM.__module__N)r7   rF   rG   Úpropertyr   r   r   r   ÚCM3  r¶   rZ  c                   @   r‚   )zETestRetrievingSourceCode.test_getfile_class_without_module.<locals>.CNrƒ   r   r   r   r   r–   7  r¸   r–   r§   )rg   rM  rN  r:   rI  )r@   rZ  r–   r   r   r   Ú!test_getfile_class_without_module2  s
   "ÿz:TestRetrievingSourceCode.test_getfile_class_without_modulec                 C   sN   G dd„ dƒ}|ƒ }|   t¡ t |¡ W d   ƒ d S 1 s w   Y  d S )Nc                   @   r}   )zDTestRetrievingSourceCode.test_getfile_broken_repr.<locals>.ErrorReprc                 S   r3  )NZxyz)rc   rZ   r   r   r   Ú__repr__>  r6  zMTestRetrievingSourceCode.test_getfile_broken_repr.<locals>.ErrorRepr.__repr__N)r7   rF   rG   r\  r   r   r   r   Ú	ErrorRepr=  r   r]  )rM  rN  r:   rI  )r@   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>Zdummyzdef x(): passza=10rþ   Úsingle)rf   r_  r0  r1  rØ   Ú
__loader__r'   Ú__dict__r»   r:   r÷   r   Ú__code__r.  r)  )r@   r_  ÚnameÚmr   r   r   Útest_getmodule_recursionD  s   z1TestRetrievingSourceCode.test_getmodule_recursionc                    s`   d\‰ ‰t j‰d‡ ‡‡fdd„	}|t _zi }ttˆˆ dƒ|ƒ t |d ¡ W ˆt _dS ˆt _w )z4doctest monkeypatches linecache to enable inspection)z<test>zdef x(): pass
Nc                    s   | ˆ kr
ˆj ddS ˆ| |ƒS )NT)Úkeepends)Ú
splitlines)r   Úmodule_globals©rG  Úgetlinesrú   r   r   ÚmonkeyS  s   
zHTestRetrievingSourceCode.test_proceed_with_fake_filename.<locals>.monkeyra  r   r   )rE  rl  r'   r)  r:   r  )r@   rm  Únsr   rk  r   Útest_proceed_with_fake_filenameO  s   z8TestRetrievingSourceCode.test_proceed_with_fake_filenamec                 C   ó   |   tjjdd¡ d S )Né   rÞ   )r  r`   rË   rd  rZ   r   r   r   Útest_getsource_on_code_object`  ó   z6TestRetrievingSourceCode.test_getsource_on_code_objectN) r7   rF   rG   r`   rø   r  r  ru   ÚskipIfr0  ÚflagsÚoptimizer  r  r   r#  r$  r,  r2  r9  r;  rB  rH  rJ  rQ  rS  rU  r[  r^  rg  ro  rr  r   r   r   r   r    s<    (ÿ
ÿ




	
r  c                   @   r}   )ÚTestGetsourceInteractivec                 C   s(   d}t d|dd\}}}|  d|¡ d S )Nz©import sys, inspect;                 assert not hasattr(sys.modules['__main__'], '__file__');                 A = type('A', (), {});                 inspect.getsource(A)z-cT)Z
__isolateds"   OSError: source code not available)r   r›   )r@   ÚcodeÚ_Ústderrr   r   r   Útest_getclasses_interactived  s   z4TestGetsourceInteractive.test_getclasses_interactiveN)r7   rF   rG   r{  r   r   r   r   rw  c  r   rw  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 rr   )ZmaxDiffr  r`   r8  rZ   r   r   r   Útest_range_toplevel_frameq  s   z;TestGettingSourceOfToplevelFrames.test_range_toplevel_framec                 C   s   |   tjdd ¡ d S rr   )r  r`   r^   rZ   r   r   r   Ú#test_range_traceback_toplevel_frameu  r´   zETestGettingSourceOfToplevelFrames.test_range_traceback_toplevel_frameN)r7   rF   rG   r`   rø   r}  r~  r   r   r   r   r|  n  s    r|  c                   @   s0   e Zd ZeZdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestDecoratorsc                 C   ó   |   tjdd¡ d S )Nrã   é   )r  r'  ÚwrappedrZ   r   r   r   Útest_wrapped_decorator{  r´   z%TestDecorators.test_wrapped_decoratorc                 C   r€  )NrÂ   é
   )r  r'  ZgonerZ   r   r   r   Útest_replacing_decorator~  r´   z'TestDecorators.test_replacing_decoratorc                 C   r€  )Né‚   é„   )r  r'  r"  rZ   r   r   r   Útest_getsource_unwrap  r´   z$TestDecorators.test_getsource_unwrapc                 C   r€  )Néq   és   )r  r'  Zfunc114rZ   r   r   r   Útest_decorator_with_lambda„  r´   z)TestDecorators.test_decorator_with_lambdaN)	r7   rF   rG   r'  rø   rƒ  r…  rˆ  r‹  r   r   r   r   r  x  s    r  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   ó   |   tjdd¡ d S )Né   )r  r'  ZollrZ   r   r   r   Útest_oneline_lambda‰  ó   z!TestOneliners.test_oneline_lambdac                 C   r€  )Né   é   )r  r'  ZtllrZ   r   r   r   Útest_threeline_lambda  ó   z#TestOneliners.test_threeline_lambdac                 C   r€  )Né!   é"   )r  r'  ZtllirZ   r   r   r   Útest_twoline_indented_lambda’  r”  z*TestOneliners.test_twoline_indented_lambdac                 C   r  )Né%   )r  r'  ZonelinefuncrZ   r   r   r   Útest_onelinefunc—  r  zTestOneliners.test_onelinefuncc                 C   r€  )Né(   é)   )r  r'  ZmanyargsrZ   r   r   r   Útest_manyargs›  ó   zTestOneliners.test_manyargsc                 C   r€  )Né,   é-   )r  r'  ZtwolinefuncrZ   r   r   r   Útest_twolinefunc¡  r  zTestOneliners.test_twolinefuncc                 C   s   |   tjd dd¡ d S )Nr    é1   )r  r'  r   rZ   r   r   r   Útest_lambda_in_list§  s   z!TestOneliners.test_lambda_in_listc                 C   r  )Né7   )r  r'  Z	anonymousrZ   r   r   r   Útest_anonymous¬  r”  zTestOneliners.test_anonymousN)r7   rF   rG   r'  rø   r  r“  r—  r™  rœ  r   r¢  r¤  r   r   r   r   rŒ  ‡  s    rŒ  c                   @   s(   e Zd ZeZdd„ Zdd„ Zdd„ ZdS )ÚTestBlockCommentsc                 C   r€  )Né`   ér   )r  r`   r  rZ   r   r   r   Útest_toplevel_class´  r´   z%TestBlockComments.test_toplevel_classc                 C   rp  )Néc   éh   )r  r`   r  rí   rZ   r   r   r   Útest_class_method·  rs  z#TestBlockComments.test_class_methodc                 C   rp  )Ném   ép   )r  r`   r  ZasyncfrZ   r   r   r   Útest_class_async_methodº  rs  z)TestBlockComments.test_class_async_methodN)r7   rF   rG   r`   rø   r¨  r«  r®  r   r   r   r   r¥  ±  s
    r¥  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   r€  )Né:   é;   )r  r'  Zwith_commentrZ   r   r   r   Útest_with_commentÀ  r´   z TestBuggyCases.test_with_commentc                 C   s   |   tjd dd¡ d S )Nr   é?   é@   )r  r'  Zmultiline_sigrZ   r   r   r   Útest_multiline_sigÃ  ó   z!TestBuggyCases.test_multiline_sigc                 C   s   |   t ¡ jdd¡ d S )NéG   éH   )r  r'  Zfunc69Zfunc71rZ   r   r   r   Útest_nested_classÆ  r¶  z TestBuggyCases.test_nested_classc                 C   r  )NéM   )r  r'  Zfunc77rZ   r   r   r   Ú#test_one_liner_followed_by_non_nameÉ  r´   z2TestBuggyCases.test_one_liner_followed_by_non_namec                 C   s   |   tjjdd¡ d S )NéS   )r  r'  Zcls82Zfunc83rZ   r   r   r   Útest_one_liner_dedent_non_nameÌ  rs  z-TestBuggyCases.test_one_liner_dedent_non_namec                 C   r€  )NéX   éZ   )r  r'  Zfunc88rZ   r   r   r   Ú&test_with_comment_instead_of_docstringÏ  r´   z5TestBuggyCases.test_with_comment_instead_of_docstringc                 C   r€  )Né_   éa   )r  r'  Zmethod_in_dynamic_classrZ   r   r   r   Útest_method_in_dynamic_classÒ  r´   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   )rM  ÚOSErrorr:   r  ÚunicodedataÚ
findsourcerZ   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= d S tj|j= w )Nr&  r   Z_dynamically_created_filer'   r    )
r)  rM  rÄ  r:   rÆ  r  rD  rE  rF  r»   )r@   r  r+  r   r   r   Ú!test_findsource_code_in_linecacheÞ  s   z0TestBuggyCases.test_findsource_code_in_linecachec                 C   s:   dD ]}t d|dƒ}|  ttj|¡ |  ttj|¡ qd S )N)rþ   r`  r&  r'   )r)  rM  ÚIOErrorr:   rÆ  r  )r@   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   ƒ d S 1 sFw   Y  d S )Nz

zdef f(): passr'   rí   r    r!   zlineno is out of bounds)r$   r:   r  r`   r)  rØ   r5   r»   rd  Úco_firstlinenoÚassertRaisesRegexrÉ  rÆ  )r@   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   rp  )Név   éw   )r  r'  ZClassWithMethodÚmethodrZ   r   r   r   Útest_getsource_on_methodû  rs  z'TestBuggyCases.test_getsource_on_methodc                 C   rp  )Néˆ   é‹   )r  r'  Zcls135Zfunc136rZ   r   r   r   Útest_nested_funcþ  rs  zTestBuggyCases.test_nested_funcc                 C   r€  )Né•   é˜   )r  r'  Zcls149rZ   r   r   r   Ú4test_class_definition_in_multiline_string_definition  r´   zCTestBuggyCases.test_class_definition_in_multiline_string_definitionc                 C   r€  )Né    é£   )r  r'  r(  rZ   r   r   r   Ú*test_class_definition_in_multiline_comment  r´   z9TestBuggyCases.test_class_definition_in_multiline_commentc                 C   rp  )Né¯   é°   )r  r'  Zcls173Zcls175rZ   r   r   r   Ú,test_nested_class_definition_indented_string  rs  z;TestBuggyCases.test_nested_class_definition_indented_stringc                 C   ó&   |   tjdd¡ |   tjjdd¡ d S )Né·   é¼   é¹   )r  r'  Zcls183Zcls185rZ   r   r   r   Útest_nested_class_definition
  ó   z+TestBuggyCases.test_nested_class_definitionc                 C   rá  )NéÂ   éÉ   éÆ   )r  r'  Zcls196Zcls200rZ   r   r   r   Útest_class_decorator  ræ  z#TestBuggyCases.test_class_decoratorc                 C   rá  )Néî   éð   éï   )r  r'  Zcls238Zcls239rZ   r   r   r   Útest_class_inside_conditional  ræ  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cls207rZ   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func219rZ   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)r@   r  r   r   r   Ú2test_nested_class_definition_inside_async_function"  s
    zATestBuggyCases.test_nested_class_definition_inside_async_functionN)!r7   rF   rG   r'  rø   r²  rµ  r¹  r»  r½  rÀ  rÃ  ru   rt  re   rÅ  rØ   ÚendswithrÇ  rÈ  rÊ  rÐ  rÔ  r×  rÚ  rÝ  rà  rå  rê  rî  rö  rý  r  r   r   r   r   r¯  ½  s8    
þ
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d}| d¡ W d   ƒ n1 s+w   Y  t	| jƒ dd l
}W d   ƒ n1 sDw   Y  || _tƒ  ¡  d S )NZ_dirzinspect_fodder3%spyÚwró   rô   zclass X:
    pass # No EOLr   )r	   ÚtempdirÚosÚmkdirrö   Úpathr&   ÚextsepÚwriter   Zinspect_fodder3rø   Úsuperrü   )r@   rí   Zmod3©Ú	__class__r   r   rü   *  s   
ÿþ
ÿzTestNoEOL.setUpc                 C   s   t  | j¡ d S r   )ÚshutilÚrmtreer
  rZ   r   r   r   ÚtearDown5  ó   zTestNoEOL.tearDownc                 C   ó   |   | jjdd¡ d S )Nr    r!   )r  rø   ÚXrZ   r   r   r   Ú
test_class8  rs  zTestNoEOL.test_class)r7   rF   rG   rü   r  r  Ú__classcell__r   r   r  r   r  )  s    r  c                   @   s   e Zd ZeZdd„ ZdS )ÚTestComplexDecoratorc                 C   r  )Ni  i  )r  rø   Zcomplex_decoratedrZ   r   r   r   Útest_parens_in_decorator?  rs  z-TestComplexDecorator.test_parens_in_decoratorN)r7   rF   rG   r'  rø   r  r   r   r   r   r  <  ó    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   r3  ©Nzbroken data descriptorrW  ©r   r   r   r   Ú__get__F  r6  z_BrokenDataDescriptor.__get__c                  G   rV  r   )ÚRuntimeErrorr   r   r   r   Ú__set__I  r   z_BrokenDataDescriptor.__set__c                  G   r3  r  rW  r   r   r   r   rŒ   L  r6  z!_BrokenDataDescriptor.__getattr__N)r7   rF   rG   r  r!  r#  rŒ   r   r   r   r   r  B  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   r3  ©Nzbroken method descriptorrW  r   r   r   r   r!  T  r6  z_BrokenMethodDescriptor.__get__c                  G   r3  r%  rW  r   r   r   r   rŒ   W  r6  z#_BrokenMethodDescriptor.__getattr__N)r7   rF   rG   r  r!  rŒ   r   r   r   r   r$  P  s    r$  c                 C   s   dd„ t  | ¡D ƒS )Nc                 S   s   g | ]}|d d… ‘qS ©NrÐ   r   )r  Útr   r   r   r  ]  s    z!attrs_wo_objs.<locals>.<listcomp>)r:   Úclassify_class_attrsr¯   r   r   r   Úattrs_wo_objs\  r´   r)  c                   @   s(  e Zd Zdd„ Z		d9d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d5d6„ Z d7d8„ Z!dS ):Ú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                   @   r‚   )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.ANrƒ   r   r   r   r   ÚAc  r…   r+  c                   @   r‚   )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.BNrƒ   r   r   r   r   ÚBd  r…   r,  c                   @   r‚   )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.CNrƒ   r   r   r   r   r–   e  r…   r–   c                   @   r‚   )z4TestClassesAndFunctions.test_newstyle_mro.<locals>.DNrƒ   r   r   r   r   ÚDf  r…   r-  )r   r:   Zgetmror»   )r@   r+  r,  r–   r-  ÚexpectedZgotr   r   r   Útest_newstyle_mroa  s   
z)TestClassesAndFunctions.test_newstyle_mroNc              	   C   sÀ   |   t¡ t |¡\}}}	}
W d   ƒ n1 sw   Y  |  ||¡ |  ||¡ |  |	|¡ |  |
|¡ |d ur^|   t¡ |  t |||	|
¡|¡ W d   ƒ d S 1 sWw   Y  d S d S r   )ÚassertWarnsÚDeprecationWarningr:   Z
getargspecr»   Úformatargspec)r@   ÚroutineÚargs_eÚ	varargs_eÚvarkw_eÚ
defaults_eÚ	formattedr   rç   rè   Údefaultsr   r   r   ÚassertArgSpecEqualsl  s   ÿÿ"ÿÿz+TestClassesAndFunctions.assertArgSpecEqualsc                 C   sÆ   t  |¡\}}}}}}}|  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||	¡ |
d ura|  t¡ |  t  |||||||¡|
¡ W d   ƒ d S 1 sZw   Y  d S d S r   )r:   Úgetfullargspecr»   r0  r1  r2  )r@   r3  r4  r5  r6  r7  Zposonlyargs_eÚkwonlyargs_eÚkwonlydefaults_eÚann_er8  r   rç   rè   r9  Ú
kwonlyargsZkwonlydefaultsÚannr   r   r   ÚassertFullArgSpecEqualsy  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)©r8  rë   rî   rï   )rÐ   é   rª   z!(a, b, c, d=3, e=4, f=5, *g, **h))
r:  r`   rË   rY   rM  Ú
ValueErrorr'  Ú	keywordedÚ	annotatedÚkeyword_only_argrZ   r   r   r   Útest_getargspec  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))r5  r<  r=  r8  z(arg1: list))r>  r8  Úargz(*, arg))r<  r8  ©r   r“   r   rì   rp   rí   z(a, b, c, d, *, e, f)r   rÈ   z#(a, b, c, d, *args, e, f, **kwargs))r5  r6  r<  r8  ©r    r!   rÐ   rD  rª   )rp   rí   z(a, b=1, c=2, d=3, *, e=4, f=5))r7  r<  r=  r8  )	rA  r'  rF  rG  rŽ   rH  Zall_markersZ all_markers_with_args_and_kwargsZall_markers_with_defaultsrZ   r   r   r   Útest_getfullargspecž  s<   ýþ
þþû
üz+TestClassesAndFunctions.test_getfullargspecc                    sÖ   t  tj¡dd„ ƒ}ˆ j|ddgdd ˆ j|ddgdd ˆ jt  |¡ddgdd ‡ fdd„}G d	d
„ d
ƒ}||ƒ ƒ ||jƒ ||ƒ jƒ ||jƒ ||ƒ jƒ G dd„ dƒ}||ƒ G dd„ dƒ}||ƒ d S )Nc                 S   r/   r   r   ©r   rá   r   r   r   Úham¾  r3   zETestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.hamr   rá   rB  rC  c                    s   ˆ j | g d¢dd d S )N©r@   r   rá   z(self, x, y)rC  )r:  ©rí   rZ   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   r/   r   r   rR  r   r   r   rQ  Ë  r3   zGTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C.hamc                 S   r/   r   r   rR  r   r   r   Ú__call__Ï  r3   zLTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C.__call__N)r7   rF   rG   rs   Úwrapsr`   rY   rQ  ÚpartialmethodÚphamrU  r   r   r   r   r–   Ê  s    



r–   c                   @   ó    e Zd Ze ej¡dd„ ƒZdS )zGTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_newc                 S   r/   r   r   rR  r   r   r   Ú__new__Ù  r3   zOTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_new.__new__N)r7   rF   rG   rs   rV  r`   rY   rZ  r   r   r   r   ÚC_newØ  ó    
r[  c                   @   rY  )zHTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_initc                 S   r/   r   r   rR  r   r   r   rÄ   ß  r3   zQTestClassesAndFunctions.test_argspec_api_ignores_wrapped.<locals>.C_init.__init__N)r7   rF   rG   rs   rV  r`   rY   rÄ   r   r   r   r   ÚC_initÞ  r\  r]  )	rs   rV  r`   rY   r:  rA  rt   rQ  rX  )r@   rQ  rT  r–   r[  r]  r   rZ   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   r/   r   r   r   r   r   r   Útestå  r   zHTestClassesAndFunctions.test_getfullargspec_signature_attr.<locals>.testrY   ©r(   ú(spam)rC  )r:   Ú	ParameterÚPOSITIONAL_ONLYÚ	SignatureÚ__signature__rA  )r@   r_  Z
spam_paramr   r   r   Ú"test_getfullargspec_signature_atträ  s   z:TestClassesAndFunctions.test_getfullargspec_signature_attrc                 C   sJ   ddd„}t  |¡}|  |j|j¡ dd„ }t  |¡}|  |j|j¡ d S )	Nr   rY   ÚreturnrQ  c                 S   r/   r   r   ©r   r   r   r   r_  í  r‡   zITestClassesAndFunctions.test_getfullargspec_signature_annos.<locals>.testc                   S   r/   r   r   r   r   r   r   r_  ñ  r‡   )r   rY   rg  rQ  )r:   r;  r»   Ú__annotations__Zannotations)r@   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 )Nr@   rC   z(self, obj)rC  r  Údir_fdÚfollow_symlinksT)rm  rn  z,(path, *, dir_fd=None, follow_symlinks=True))r4  r<  r=  r8  )rA  Ú_pickleÚPicklerÚdumpÚioÚBytesIOr  ÚstatrZ   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_defaultsr:   r;  r»   r9  )r@   rw  Úbuiltinrj  r   r   r   Ú test_getfullargspec_builtin_func  s   
z8TestClassesAndFunctions.test_getfullargspec_builtin_funcc                 C   sH   dd l }|j}|  t¡ t |¡ W d   ƒ d S 1 sw   Y  d S )Nr   )rw  Údocstring_no_signaturerM  rN  r:   r;  )r@   rw  ry  r   r   r   Ú-test_getfullargspec_builtin_func_no_signature  s
   "ÿzETestClassesAndFunctions.test_getfullargspec_builtin_func_no_signaturec                 C   ób   t ƒ D ]}t |¡}t|jƒ}t|ƒ}|  |¡ |  ||¡ qt t¡}t|jƒ}|  |t	¡ d S r   )
r.   r:   r;  rŽ   r?  Úsortedr6   r»   r2   Ú unsorted_keyword_only_parameters©r@   rG  Ú	signaturerÎ  Zsorted_lr   r   r   Ú8test_getfullargspec_definition_order_preserved_on_kwonly  ó   





zPTestClassesAndFunctions.test_getfullargspec_definition_order_preserved_on_kwonlyc                 C   s$   G dd„ dt ƒ}|  |jdg¡ d S )Nc                   @   r}   )z9TestClassesAndFunctions.test_getargspec_method.<locals>.Ac                 S   r/   r   r   rZ   r   r   r   rf  $  r   z;TestClassesAndFunctions.test_getargspec_method.<locals>.A.mN©r7   rF   rG   rf  r   r   r   r   r+  #  r   r+  r@   )r   r:  rf  ©r@   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   r/   r   r   r   r   r   r   Ús+  r‡   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.A.sc                 S   r/   r   r   r¯   r   r   r   r   .  r‡   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.A.cc                 S   r/   r   r   rZ   r   r   r   Úgetp1  r‡   z>TestClassesAndFunctions.test_classify_newstyle.<locals>.A.getpc                 S   r/   r   r   rZ   r   r   r   rf  4  r‡   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.A.mc                 S   r/   r   r   rZ   r   r   r   Úm16  r‡   z<TestClassesAndFunctions.test_classify_newstyle.<locals>.A.m1Ú1N)r7   rF   rG   r‡  Ústaticmethodr   Úclassmethodrˆ  rY  r*   rf  r‰  Údatablobr  Úddr$  Úmdr   r   r   r   r+  )  s    
r+  rZ  ústatic methodúmissing __new__rÄ   rÓ  zmissing __init__r‡  zmissing static methodr   úclass methodúmissing class methodr*   rY  zmissing propertyrf  zmissing plain method: %rr‰  úmissing plain methodr  Údatazmissing datar  zmissing method descriptorrŽ  zmissing data descriptorc                   @   r}   )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Bc                 S   r/   r   r   rZ   r   r   r   rf  O  r‡   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.B.mNr„  r   r   r   r   r,  M  ó    r,  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Cc                 S   r/   r   r   rZ   r   r   r   rf  ^  r‡   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.C.mc                 S   r/   r   r   rZ   r   r   r   r   _  r‡   z;TestClassesAndFunctions.test_classify_newstyle.<locals>.C.cN)r7   rF   rG   rf  r   r   r   r   r   r–   \  s    r–   c                   @   r}   )z9TestClassesAndFunctions.test_classify_newstyle.<locals>.Dc                 S   r/   r   r   rZ   r   r   r   r‰  m  r‡   z<TestClassesAndFunctions.test_classify_newstyle.<locals>.D.m1N)r7   rF   rG   r‰  r   r   r   r   r-  k  r–  r-  )r   r)  r›   )r@   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 )NrZ  r  r‘  r!  r’  r“  r   rÓ  r”  Ú__add__Ú__and__)ÚdirÚ__builtins__ÚgetattrÚ
isinstancerg   r:   r(  r)  Úboolr›   r­   )r@   re  ry  r˜  r   r   r   Útest_classify_builtin_typesy  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                       ó   e Zd Z‡ fdd„Z‡  ZS )zITestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.Metac                    ó   |dkrdS t ƒ  |¡S )NrQ  rY   ©r  rŒ   ©r@   re  r  r   r   rŒ     ó   zUTestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.Meta.__getattr__©r7   rF   rG   rŒ   r  r   r   r  r   ÚMetaŽ  ó    r¨  c                   @   ó   e Zd Zejdd„ ƒZdS )zGTestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.VAc                 S   ó   dS )NrË   r   rZ   r   r   r   rQ  ”  r3   zKTestClassesAndFunctions.test_classify_DynamicClassAttribute.<locals>.VA.hamN)r7   rF   rG   rf   ÚDynamicClassAttributerQ  r   r   r   r   ÚVA“  ó    r­  r§   rQ  r•  rY   )rg   r:   Ú	Attributerc  r›   r(  )r@   r¨  r­  Zshould_find_dcaZshould_find_gar   r   r   Ú#test_classify_DynamicClassAttribute  s   z;TestClassesAndFunctions.test_classify_DynamicClassAttributec                    sP   G ‡ fdd„dt ƒ‰ G ‡ fdd„dt ƒ}t dd||j¡}|  |t |¡¡ d S )Nc                       s    e Zd Z‡ fdd„Zdd„ ZdS )zDTestClassesAndFunctions.test_classify_overrides_bool.<locals>.NoBoolc                    s   ˆ ƒ S r   r   )r@   rD   ©ÚNoBoolr   r   Ú__eq__ž  s   zKTestClassesAndFunctions.test_classify_overrides_bool.<locals>.NoBool.__eq__c                 S   r3  )Nz,This object does not specify a boolean value)ÚNotImplementedErrorrZ   r   r   r   Ú__bool__¡  s   ÿzMTestClassesAndFunctions.test_classify_overrides_bool.<locals>.NoBool.__bool__N)r7   rF   rG   r³  rµ  r   r±  r   r   r²    s    r²  c                       ó   e Zd Z” ƒ ZdS )zCTestClassesAndFunctions.test_classify_overrides_bool.<locals>.HasNBN)r7   rF   rG   rŽ  r   r±  r   r   ÚHasNB¥  ó    
r·  rŽ  r•  )r   r:   r¯  rŽ  r›   r(  )r@   r·  Zshould_find_attrr   r±  r   Útest_classify_overrides_boolœ  s   z4TestClassesAndFunctions.test_classify_overrides_boolc                 C   óH   G dd„ dt ƒ}G dd„ d|d}t dd|d¡}|  |t |¡¡ d S )	Nc                   @   ó   e Zd ZdZdd„ ZdS )zMTestClassesAndFunctions.test_classify_metaclass_class_attribute.<locals>.MetaÚslapc                 S   ó   g d¢S )N)r  rF   r7   Úfishr   rZ   r   r   r   Ú__dir__®  r6  zUTestClassesAndFunctions.test_classify_metaclass_class_attribute.<locals>.Meta.__dir__N)r7   rF   rG   r¾  r¿  r   r   r   r   r¨  ¬  ó    r¨  c                   @   r‚   )zNTestClassesAndFunctions.test_classify_metaclass_class_attribute.<locals>.ClassNrƒ   r   r   r   r   ÚClass°  r¸   rÁ  r§   r¾  r•  r¼  ©rg   r:   r¯  r›   r(  ©r@   r¨  rÁ  Zshould_findr   r   r   Ú'test_classify_metaclass_class_attribute«  s   z?TestClassesAndFunctions.test_classify_metaclass_class_attributec                 C   rº  )	Nc                       ó$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )zDTestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.Metac                 S   r½  )N)r  rF   r7   ÚBOOMr   r¯   r   r   r   r¿  ·  r6  zLTestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.Meta.__dir__c                    r£  )NrÆ  r˜   )r  Z_Meta__getattrr¥  r  r   r   rŒ   ¹  r¦  zPTestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.Meta.__getattr__©r7   rF   rG   r¿  rŒ   r  r   r   r  r   r¨  ¶  ó    r¨  c                   @   r‚   )zETestClassesAndFunctions.test_classify_VirtualAttribute.<locals>.ClassNrƒ   r   r   r   r   rÁ  ½  r¸   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 ]}|  ||¡ qQd S )Nc                       rÅ  )zSTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta1c                 S   r½  )N)r  rF   r7   Úoner   r¯   r   r   r   r¿  Ä  r6  z[TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta1.__dir__c                    r£  )NrÊ  r    r¤  r¥  r  r   r   rŒ   Æ  r¦  z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta1.__getattr__rÇ  r   r   r  r   ÚMeta1Ã  rÈ  rË  c                       rÅ  )zSTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta2c                 S   r½  )N)r  rF   r7   Útwor   r¯   r   r   r   r¿  Ë  r6  z[TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta2.__dir__c                    r£  )NrÌ  r!   r¤  r¥  r  r   r   rŒ   Í  r¦  z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta2.__getattr__rÇ  r   r   r  r   ÚMeta2Ê  rÈ  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  rF   r7   Úthree)rŽ   r~  r9   r¿  r¯   ©rË  rÍ  r   r   r¿  Ò  s
   ÿ
ÿz[TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta3.__dir__c                    r£  )NrÎ  rÐ   r¤  r¥  r  r   r   rŒ   Õ  r¦  z_TestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Meta3.__getattr__rÇ  r   rÏ  r  r   ÚMeta3Ñ  s    rÐ  c                   @   r‚   )zTTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Class1Nrƒ   r   r   r   r   ÚClass1Ù  r¸   rÑ  r§   c                   @   r‚   )zTTestClassesAndFunctions.test_classify_VirtualAttribute_multi_classes.<locals>.Class2Nrƒ   r   r   r   r   ÚClass2Û  r¸   rÒ  rÊ  r•  r    rÌ  r!   rÎ  rÐ   )rg   r:   r¯  r(  r›   )	r@   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   óF   G dd„ dt ƒ}G dd„ d|d}dd„ t |¡D ƒ}|  d|¡ d S )	Nc                   @   r}   )zKTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.Mc                 S   r½  ©N)r  r7   Úmissingr   r¯   r   r   r   r¿  ç  r6  zSTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.M.__dir__N©r7   rF   rG   r¿  r   r   r   r   ÚMæ  r   rØ  c                   @   r‚   )zKTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.CNrƒ   r   r   r   r   r–   é  r¸   r–   r§   c                 S   r  ©r   r   ©r  r   r   r   r   r  ë  r  zTTestClassesAndFunctions.test_classify_class_attrs_with_buggy_dir.<locals>.<listcomp>rÖ  )rg   r:   r(  rœ   ©r@   rØ  r–   r˜  r   r   r   Ú(test_classify_class_attrs_with_buggy_dirå  ó   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)r7   rF   rG   r  rŽ  r$  r  r   r   r   r   r+  ï  s    
r+  c                    s"   G dd„ dt ƒ‰ ‡ ‡fdd„}|S )Nc                   @   r‚   )zXTestClassesAndFunctions.test_getmembers_descriptors.<locals>.pred_wrapper.<locals>.EmptyNrƒ   r   r   r   r   ÚEmptyö  r¸   rÞ  c                    s$   dt | ƒv rtˆ | jƒrdS ˆ| ƒS )Nr7   F)rœ  re   r7   ©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_wrapperr  rŽ  c                   @   r‚   )z>TestClassesAndFunctions.test_getmembers_descriptors.<locals>.BNrƒ   r   r   r   r   r,    r¸   r,  )r   r:   Úismethoddescriptorrj   r»   rš   rc  )r@   r+  rã  rä  rj   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                   @   r}   )z9TestClassesAndFunctions.test_getmembers_method.<locals>.Bc                 S   r/   r   r   rZ   r   r   r   rí     r   z;TestClassesAndFunctions.test_getmembers_method.<locals>.B.fN©r7   rF   rG   rí   r   r   r   r   r,    r   r,  rí   )r›   rí   r:   rš   rœ   rL   )r@   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                       r¢  )zCTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.Mc                    r£  )NrË   Ú	scrambledr¤  )r°   re  r  r   r   rŒ     r¦  zOTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.M.__getattr__r§  r   r   r  r   rØ    r©  rØ  c                   @   rª  )zCTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.Ac                 S   r«  rX   r   rZ   r   r   r   rË      r3   zHTestClassesAndFunctions.test_getmembers_VirtualAttribute.<locals>.A.eggsN)r7   rF   rG   rf   r¬  rË   r   r   r   r   r+    r®  r+  r§   )rË   rè  )rË   rY   )rg   r›   r:   rš   )r@   rØ  r+  r   r   r   Ú test_getmembers_VirtualAttribute  s   z8TestClassesAndFunctions.test_getmembers_VirtualAttributec                 C   rÔ  )	Nc                   @   r}   )zATestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.Mc                 S   r½  rÕ  r   r¯   r   r   r   r¿  (  r6  zITestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.M.__dir__Nr×  r   r   r   r   rØ  '  r   rØ  c                   @   r‚   )zATestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.CNrƒ   r   r   r   r   r–   *  r¸   r–   r§   c                 S   r  rÙ  r   rÚ  r   r   r   r  ,  r  zJTestClassesAndFunctions.test_getmembers_with_buggy_dir.<locals>.<listcomp>rÖ  )rg   r:   rš   rœ   rÛ  r   r   r   Útest_getmembers_with_buggy_dir&  rÝ  z6TestClassesAndFunctions.test_getmembers_with_buggy_dirc                 C   sÊ  dt dtfdd„}|  t |¡t tdœ¡ dddœ|_|  t |¡dddœ¡ |  tj|dtƒ d	|tdœ¡ |  tj|dtƒ d
|tdœ¡ t}|  t |¡t tdœ¡ |  t |j¡t tdœ¡ |  t |j	¡t t|jdœ¡ |  t |j
¡t d|j|jdœ¡ |  t |j¡ddddœ¡ |  t t¡i ¡ |  t |j¡i ¡ |  t |j¡i ¡ |  tj|ddt tdœ¡ |  tj|jddt tdœ¡ |  tj|j	ddt t|jdœ¡ |  tj|j
ddt t|j|jdœ¡ |  tj|jddt t|jdœ¡ |  tjtddi ¡ |  tj|jddi ¡ |  tj|jddi ¡ |  tj|ddt tdœ¡ |  tj|jddt tdœ¡ |  tj|j	ddt t|jdœ¡ |  tj|j
ddt d|j|jdœ¡ |  tj|jddddddœ¡ |  tjtddi ¡ |  tj|jddi ¡ |  tj|jddi ¡ dd„ }||j	ƒ}|  |ddƒ| dd¡¡ |  |j|j	j¡ |  t |¡t t|jdœ¡ |  tj|ddt t|jdœ¡ |  tj|ddt t|jdœ¡ d S )Nr   r“   c                 S   r/   r   r   r’   r   r   r   r"   0  r‡   zPTestClassesAndFunctions.test_get_annotations_with_stock_annotations.<locals>.foor’   r"   r/  T©Úeval_strré   ©rì  Úglobals©r   r“   rg  ©r   r“   r   rg  r­   ÚMyClass©r   r“   r   ©rì  Fc                    ó   t  ˆ ¡‡ fdd„ƒ}|S )Nc                    ó   ˆ | d |d ƒS r&  r   r’   ©rG  r   r   ÚwrapperV  ó   ziTestClassesAndFunctions.test_get_annotations_with_stock_annotations.<locals>.times_three.<locals>.wrapper©rs   rV  ©rG  r÷  r   rö  r   Útimes_threeU  ó   zXTestClassesAndFunctions.test_get_annotations_with_stock_annotations.<locals>.times_threer    r   rÐ   Úxxx)r­   r/  r»   r:   Úget_annotationsri  ré   r   rñ  rÙ   Ú	function2Ú	function3ÚUnannotatedClassÚunannotated_functionÚassertIsNotÚ__globals__)r@   r"   Úisarû  r‚  r   r   r   Ú+test_get_annotations_with_stock_annotations/  sL     ""&""& 
 $zCTestClassesAndFunctions.test_get_annotations_with_stock_annotationsc                 C   sb  t }|  t |¡dddœ¡ |  t |j¡dddœ¡ |  t |j¡ddddœ¡ |  t |j¡dddddœ¡ |  t |j¡ddd	d
œ¡ |  t |j¡i ¡ |  t |j	¡i ¡ |  tj|ddt
tdœ¡ |  tj|jddt
tdœ¡ |  tj|jddt
t|jdœ¡ |  tj|jddt
d|j|jdœ¡ |  tj|jdddddd
œ¡ |  tj|jddi ¡ |  tj|j	ddi ¡ |  tj|dddddœ¡ |  tj|jdddddœ¡ |  tj|jddddddœ¡ |  tj|jdddddddœ¡ |  tj|jddddd	d
œ¡ |  tj|jddi ¡ |  tj|j	ddi ¡ t}|  t |¡i ¡ |  tj|ddi ¡ |  tj|ddi ¡ dd„ }||jƒ}|  |ddƒ| dd¡¡ |  |j|jj¡ |  t |¡ddddœ¡ |  tj|ddt
t|jdœ¡ |  tj|ddddddœ¡ |  t |j¡ddi¡ |  tj|jdddt
i¡ d S )Nr­   r/  r’   rñ  rï  ú'str'rð  ú'int'ú	'MyClass'rò  Tró  Fc                    rô  )Nc                    rõ  r&  r   r’   rö  r   r   r÷  ‚  rø  znTestClassesAndFunctions.test_get_annotations_with_stringized_annotations.<locals>.times_three.<locals>.wrapperrù  rú  r   rö  r   rû    rü  z]TestClassesAndFunctions.test_get_annotations_with_stringized_annotations.<locals>.times_threer    r   rÐ   rý  Zmytype)r   r»   r:   rþ  rñ  rÙ   rÿ  r   r  r  r­   r/  r   r  r  ZMyClassWithLocalAnnotations)r@   r  Zisa2rû  r‚  r   r   r   Ú0test_get_annotations_with_stringized_annotationsb  sF   "&  " 
  zHTestClassesAndFunctions.test_get_annotations_with_stringized_annotations)NNNN)"r7   rF   rG   r/  r:  rA  rI  rO  r^  rf  rk  ru   rt  r   ru  r   rz  r|  r‚  r†  r™  r¡  r°  r¹  rÄ  rÉ  rÓ  rÜ  rå  rç  ré  rê  r  r
  r   r   r   r   r*  `  s\    
ÿ
ü(	ÿ
ÿÿQ
#	 	3r*  c                   @   r}   )ÚTestFormatAnnotationc                 C   s8   ddl m}m} |  t |¡d¡ |  t |¡d¡ d S )Nr   )r@  Úann1zUnion[List[str], int]z%Union[List[testModule.typing.A], int])Ztest.typinganndata.ann_module9r@  r  r»   r:   Zformatannotation)r@   r@  r  r   r   r   Útest_typing_replacement”  r<  z,TestFormatAnnotation.test_typing_replacementN)r7   rF   rG   r  r   r   r   r   r  “  r   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   r/   r   r   )r@   Úvaluerg   r   r   r   r!  ž  r‡   zOTestIsDataDescriptor.test_custom_descriptors.<locals>.NonDataDescriptor.__get__r   ©r7   rF   rG   r!  r   r   r   r   ÚNonDataDescriptor  ó    r  c                   @   r}   )zETestIsDataDescriptor.test_custom_descriptors.<locals>.DataDescriptor0c                 S   r/   r   r   )r@   re  r  r   r   r   r#     r‡   zMTestIsDataDescriptor.test_custom_descriptors.<locals>.DataDescriptor0.__set__N©r7   rF   rG   r#  r   r   r   r   ÚDataDescriptor0Ÿ  r   r  c                   @   r}   )zETestIsDataDescriptor.test_custom_descriptors.<locals>.DataDescriptor1c                 S   r/   r   r   r¥  r   r   r   Ú
__delete__¢  r‡   zPTestIsDataDescriptor.test_custom_descriptors.<locals>.DataDescriptor1.__delete__N)r7   rF   rG   r  r   r   r   r   ÚDataDescriptor1¡  r   r  c                   @   s   e Zd ZdZdS )zETestIsDataDescriptor.test_custom_descriptors.<locals>.DataDescriptor2Nr  r   r   r   r   ÚDataDescriptor2£  r—   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)r?   r:   rj   r6   )r@   r  r  r  r  r   r   r   Útest_custom_descriptorsœ  s    ÿÿÿÿz,TestIsDataDescriptor.test_custom_descriptorsc                 C   ó&   G dd„ dƒ}|   t |j¡d¡ d S )Nc                   @   r‘   )z/TestIsDataDescriptor.test_slot.<locals>.Slotted©r"   Nr”   r   r   r   r   ÚSlotted¯  r—   r  za slot is a data descriptor)r6   r:   rj   r"   )r@   r  r   r   r   Ú	test_slot®  s   ÿzTestIsDataDescriptor.test_slotc                 C   r  )Nc                   @   ó   e Zd Zedd„ ƒZdS )z6TestIsDataDescriptor.test_property.<locals>.Propertiedc                 S   r/   r   r   rZ   r   r   r   Ú
a_property¶  r3   zATestIsDataDescriptor.test_property.<locals>.Propertied.a_propertyN)r7   rF   rG   rY  r  r   r   r   r   Ú
Propertiedµ  r¶   r  za property is a data descriptor)r6   r:   rj   r  )r@   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   r/   r   r   rZ   r   r   r   Úinstance_method¾  r‡   zATestIsDataDescriptor.test_functions.<locals>.Test.instance_methodc                 S   r/   r   r   r¯   r   r   r   Úclass_method¿  r   z>TestIsDataDescriptor.test_functions.<locals>.Test.class_methodc                   S   r/   r   r   r   r   r   r   Ústatic_methodÁ  r   z?TestIsDataDescriptor.test_functions.<locals>.Test.static_methodN)r7   rF   rG   r!  rŒ  r"  r‹  r#  r   r   r   r   ÚTest½  s    
r$  c                   S   r/   r   r   r   r   r   r   rÙ   Ã  r   z5TestIsDataDescriptor.test_functions.<locals>.functionc                   S   r/   r   r   r   r   r   r   r†   Å  r‡   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   r?   r:   rj   r!  r"  r#  )r@   r$  rÙ   Za_lambdar   r   r   Útest_functions¼  s$   ÿÿÿÿÿz#TestIsDataDescriptor.test_functionsN)r7   rF   rG   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   óV   dd„ }t ƒ }d|i}dti}dti}dh}t ||||¡}|  t ||ƒ¡|¡ d S )Nc                    ó   ‡ fdd„}|S )Nc                    ó   t | ˆ ttƒ d S r   ©ÚprintÚ_global_refÚunbound_ref©Z	local_ref©Únonlocal_refr   r   rî   Ø  ó   z=TestGetClosureVars.test_name_resolution.<locals>.f.<locals>.gr   ©r0  rî   r   r/  r   rí   ×  ó   z2TestGetClosureVars.test_name_resolution.<locals>.fr0  r,  r+  r-  ©r   r,  r+  r:   ÚClosureVarsr»   Úgetclosurevars©r@   rí   Ú_argÚnonlocal_varsÚglobal_varsÚbuiltin_varsÚunbound_namesr.  r   r   r   Útest_name_resolutionÕ  s   ÿz'TestGetClosureVars.test_name_resolutionc                 C   r'  )Nc                    r(  )Nc                 3   s    t | ˆ ttƒ d V  d S r   r*  r.  r/  r   r   rî   æ  s   €
z?TestGetClosureVars.test_generator_closure.<locals>.f.<locals>.gr   r2  r   r/  r   rí   å  s   z4TestGetClosureVars.test_generator_closure.<locals>.fr0  r,  r+  r-  r4  r7  r   r   r   Útest_generator_closureä  s   ÿz)TestGetClosureVars.test_generator_closurec                 C   s`   G dd„ dƒ}t ƒ }d|i}dti}dti}dh}t ||||¡}|  t |ƒ  |¡¡|¡ d S )Nc                   @   r}   )z1TestGetClosureVars.test_method_closure.<locals>.Cc                    s   ‡ fdd„}|S )Nc                    r)  r   r*  r.  r/  r   r   rî   ö  r1  z>TestGetClosureVars.test_method_closure.<locals>.C.f.<locals>.gr   )r@   r0  rî   r   r/  r   rí   õ  r3  z3TestGetClosureVars.test_method_closure.<locals>.C.fNræ  r   r   r   r   r–   ô  r   r–   r0  r,  r+  r-  )r   r,  r+  r:   r5  r»   r6  rí   )r@   r–   r8  r9  r:  r;  r<  r.  r   r   r   Útest_method_closureó  s   ÿz&TestGetClosureVars.test_method_closurec                    s¼   dd„ ‰dd„ }dd„ }dd„ }‡ fd	d
„‰ ‡ ‡‡fdd„}|dƒ}|dƒ}||dƒ}ˆ  ˆ|ƒddi¡ ˆ  ˆ|ƒddi¡ ˆ  ˆ|ƒd|dœ¡ ˆ  ˆdd„ dƒƒddi¡ ˆ |ƒ d S )Nc                 S   s   t  | ¡jS r   )r:   r6  Z	nonlocalsrS  r   r   r   Ú_nonlocal_vars  ó   z=TestGetClosureVars.test_nonlocal_vars.<locals>._nonlocal_varsc                    r(  )Nc                    ó   ˆ |  S r   r   ©rá   rß  r   r   Úadd  r6  zFTestGetClosureVars.test_nonlocal_vars.<locals>.make_adder.<locals>.addr   )r   rD  r   rß  r   Ú
make_adder  r3  z9TestGetClosureVars.test_nonlocal_vars.<locals>.make_adderc                    s   ‡ ‡fdd„S )Nc                    s
   ˆˆ | ƒS r   r   ©rK  ©rJ  rÏ  r   r   r†     ó   
 zFTestGetClosureVars.test_nonlocal_vars.<locals>.curry.<locals>.<lambda>r   )rÏ  rJ  r   rG  r   Úcurry  r   z4TestGetClosureVars.test_nonlocal_vars.<locals>.curryc                 S   s   | |k S r   r   r’   r   r   r   Ú	less_than  r6  z8TestGetClosureVars.test_nonlocal_vars.<locals>.less_thanc                    s   ‡ fdd„}|ˆ_ ||ƒS )Nc                    s   ˆ‡ fdd„ƒS )Nc                    s   ˆ ˆ ƒ| ƒS r   r   rß  rS  r   r   r†     r…   zMTestGetClosureVars.test_nonlocal_vars.<locals>.Y.<locals>.g.<locals>.<lambda>r   rS  ©ÚlerS  r   rî     r  z;TestGetClosureVars.test_nonlocal_vars.<locals>.Y.<locals>.g)Úg_ref)rL  rî   )ÚYrK  r   rN    s   z0TestGetClosureVars.test_nonlocal_vars.<locals>.Yc                    s   ˆ  ˆ| ƒdˆ ji¡ d S )Nrí   )r»   rM  ©rÏ  ©rN  r@  r@   r   r   Úcheck_y_combinator  rK  zATestGetClosureVars.test_nonlocal_vars.<locals>.check_y_combinatorr    r!   rª   r   rG  c                    s   ‡ fdd„S )Nc                    rB  r   r   rC  rß  r   r   r†   $  s    zITestGetClosureVars.test_nonlocal_vars.<locals>.<lambda>.<locals>.<lambda>r   rß  r   rß  r   r†   $  r…   z7TestGetClosureVars.test_nonlocal_vars.<locals>.<lambda>rÐ   )r»   )r@   rE  rI  rJ  rQ  ZincZadd_twoZgreater_than_fiver   rP  r   Útest_nonlocal_vars  s$   

ÿÿz%TestGetClosureVars.test_nonlocal_varsc                 C   sF   dd„ }t  i i i tƒ ¡}|  t  dd„ ¡|¡ |  t  |¡|¡ d S )Nc                   S   r/   r   r   r   r   r   r   r"   )  r‡   z9TestGetClosureVars.test_getclosurevars_empty.<locals>.fooc                   S   r«  ©NTr   r   r   r   r   r†   +  r‡   z>TestGetClosureVars.test_getclosurevars_empty.<locals>.<lambda>)r:   r5  r9   r»   r6  )r@   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                   @   r‚   )z7TestGetClosureVars.test_getclosurevars_error.<locals>.TNrƒ   r   r   r   r   ÚT/  r…   rU  r    )rM  rN  r:   r6  rŽ   )r@   rU  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'   )r@   rx  rn  r   r   r   Ú_private_globals4  s   
z#TestGetClosureVars._private_globalsc                 C   sD   |   ¡ \}}| dd ¡ t i i dtidh¡}|  t |¡|¡ d S )Nr  r+  r  )rW  Úpopr:   r5  r+  r»   r6  ©r@   rí   rn  r.  r   r   r   Útest_builtins_fallback:  ó   z)TestGetClosureVars.test_builtins_fallbackc                 C   sD   |   ¡ \}}ddi|d< t i i ddidh¡}|  t |¡|¡ d S )Nr  r    r  r+  )rW  r:   r5  r»   r6  rY  r   r   r   Útest_builtins_as_dict@  r[  z(TestGetClosureVars.test_builtins_as_dictc                 C   sB   |   ¡ \}}t|d< t i i dtjidh¡}|  t |¡|¡ d S )Nr  r  r+  )rW  r  r:   r5  r  r»   r6  rY  r   r   r   Útest_builtins_as_moduleF  s   z*TestGetClosureVars.test_builtins_as_moduleN)r7   rF   rG   r=  r>  r?  rR  rT  rV  rW  rZ  r\  r]  r   r   r   r   r&  Ó  s    &r&  c                   @   s`   e Zd Zddd„Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTestGetcallargsFunctionsNc                 C   s@   t |pi |d}td| d |ƒ}td| d |ƒ}|  ||¡ d S )NrO  úfunc(%s)úinspect.getcallargs(func, %s))r™   r5   r»   )r@   rÏ  Úcall_params_stringÚlocsZr1Zr2r   r   r   ÚassertEqualCallArgsO  s   
ÿz,TestGetcallargsFunctions.assertEqualCallArgsc              
   C   sÐ   t |pi |d}z
td| d |ƒ W n ty& } z|}W Y d }~n
d }~ww |  d¡ z
td| d |ƒ W n tyJ } z|}W Y d }~n
d }~ww |  d¡ |  t|ƒt|ƒ¡ |  t|ƒt|ƒ¡ ~~d S )NrO  r_  zException not raisedr`  )r™   r5   rc   ZfailrÔ   rg   r»   r/  )r@   rÏ  Zcall_param_stringrb  rp   Zex1Zex2r   r   r   ÚassertEqualExceptionV  s(   €ÿ

ÿ€ÿ
z-TestGetcallargsFunctions.assertEqualExceptionc                 C   s   d}t || ƒS )z+Create a function that returns its locals()zlambda %s: locals())r5   )r@   r  rx  r   r   r   ÚmakeCallablei  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)©re  rc  ©r@   rí   r   r   r   Ú
test_plainn  s&   
z#TestGetcallargsFunctions.test_plainc                 C   óV   |   d¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )Nz
a, b=1, *crg  rh  ú2, 3, 4z*(2,3,4)z	2, *[3,4]z 2, 3, *collections.UserList([4])rj  rk  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, **cri  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)rj  rk  r   r   r   Ú
test_varkwŽ  s   
z#TestGetcallargsFunctions.test_varkwc                 C   rm  )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)rj  rk  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)re  rc  rd  rk  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)rj  rk  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¡ |  |d¡ qI|   d¡}|  |d¡ |  |d¡ |   d¡}|  |d¡ |  |d¡ dd„ }|  td¡ t |¡ W d   ƒ n1 sÊw   Y  dd„ }|  td¡ t |¡ W d   ƒ n1 séw   Y  |  td¡ tjdtjjd d! W d   ƒ n	1 s
w   Y  |  td"¡ tjd#d$d d! W d   ƒ n	1 s)w   Y  |  td%¡ tjd&d'd( W d   ƒ d S 1 sHw   Y  d S ))Nrþ   za, brf  rŠ  r&  z1,x=1ri  zb=3rn  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=3rq  z1, 2z1, 2, a=1, b=2z	*, a, b=0c                 S   r/   r   r   rh  r   r   r   Úf5û  r‡   z0TestGetcallargsFunctions.test_errors.<locals>.f5zmissing 1 required keyword-onlyc                 S   r/   r   r   rò  r   r   r   Úf6  r   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é{   rD  ©ry  )	re  rd  rÌ  rN  r:   ZgetcallargsrE  rb  ÚVAR_KEYWORD)	r@   Zf0Úf1Úf2rí   Úf3Úf4rv  rw  r   r   r   Útest_errorsÌ  sr   




ÿþÿÿÿýÿþÿ$þz$TestGetcallargsFunctions.test_errorsr   )r7   rF   rG   rc  rd  re  rl  ro  rp  rr  rt  ru  r‚  r   r   r   r   r^  M  s    

	
r^  c                       rÅ  )ÚTestGetcallargsMethodsc                 C   s"   G dd„ dt ƒ}|| _|ƒ | _d S )Nc                   @   r‚   )z)TestGetcallargsMethods.setUp.<locals>.FooNrƒ   r   r   r   r   ÚFoo  r¸   r„  )r   r°   Úinst)r@   r„  r   r   r   rü     s   zTestGetcallargsMethods.setUpc                    s0   d|vsJ ‚t t| ƒj}|d| ƒ| j_| jjS )Nr@   zself, )r  rƒ  re  r°   rÓ  r…  )r@   r  Úmkr  r   r   re    s   z#TestGetcallargsMethods.makeCallable)r7   rF   rG   rü   re  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‡  re  r°   rÓ  ©r@   r  r  r   r   re  %  s   z*TestGetcallargsUnboundMethods.makeCallableNc                    ó   t t| ƒj|  |||¡Ž S r   )r  r‡  rc  Ú_getAssertEqualParams©r@   rÏ  ra  rb  r  r   r   rc  )  ó   
ÿz1TestGetcallargsUnboundMethods.assertEqualCallArgsc                    r‰  r   )r  r‡  rd  rŠ  r‹  r  r   r   rd  -  rŒ  z2TestGetcallargsUnboundMethods.assertEqualExceptionc                 C   s,   d|vsJ ‚t |p
i | jd}|d| |fS )Nr…  )r…  zinst,)r™   r…  r‹  r   r   r   rŠ  1  s   z3TestGetcallargsUnboundMethods._getAssertEqualParamsr   )r7   rF   rG   re  rc  rd  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 s8w   Y  |  t |dd¡d¡ d S )Nc                   @   ó   e Zd Zeƒ ZdS )z+TestGetattrStatic.test_basic.<locals>.ThingN©r7   rF   rG   r   r   r   r   r   r   ÚThing:  r¸  r  r   rá   rÐ   )r   r»   r:   Úgetattr_staticr   rM  rX  ©r@   r  Úthingr   r   r   Ú
test_basic9  s   ÿzTestGetattrStatic.test_basicc                 C   s@   G dd„ dt ƒ}G dd„ d|ƒ}|ƒ }|  t |d¡|j¡ d S )Nc                   @   rŽ  )z/TestGetattrStatic.test_inherited.<locals>.ThingNr  r   r   r   r   r  F  r¸  r  c                   @   r‚   )z4TestGetattrStatic.test_inherited.<locals>.OtherThingNrƒ   r   r   r   r   Ú
OtherThingH  r¸   r•  r   ©r   r»   r:   r‘  r   )r@   r  r•  Z	somethingr   r   r   Útest_inheritedE  s   z TestGetattrStatic.test_inheritedc                 C   sH   G dd„ dt ƒ}|dƒ}|  t |d¡d¡ |`|  t |d¡d¡ d S )Nc                   @   r»  )z3TestGetattrStatic.test_instance_attr.<locals>.Thingr!   c                 S   s
   || _ d S r   rß  ©r@   r   r   r   r   rÄ   Q  ó   
z<TestGetattrStatic.test_instance_attr.<locals>.Thing.__init__N)r7   rF   rG   r   rÄ   r   r   r   r   r  O  rÀ  r  rÐ   r   r!   r–  r’  r   r   r   Útest_instance_attrN  s
   z$TestGetattrStatic.test_instance_attrc                 C   s0   G dd„ dt ƒ}|ƒ }|  t |d¡|j¡ d S )Nc                   @   r  )z.TestGetattrStatic.test_property.<locals>.Thingc                 S   r3  ©NzI'm pretending not to existrW  rZ   r   r   r   r   Z  s   z0TestGetattrStatic.test_property.<locals>.Thing.xN)r7   rF   rG   rY  r   r   r   r   r   r  Y  r¶   r  r   r–  r’  r   r   r   r   X  s   zTestGetattrStatic.test_propertyc                    sH   G dd„ dt ƒ}|ƒ ‰ G ‡ fdd„dt ƒ}|ƒ }|  t |d¡ˆ ¡ d S )Nc                   @   r}   )zKTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.descriptorc                  W   r3  r›  rW  )ry  r   r   r   r!  b  r6  zSTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.descriptor.__get__Nr  r   r   r   r   Ú
descriptora  r   rœ  c                       s   e Zd Z” ZdS )zFTestGetattrStatic.test_descriptor_raises_AttributeError.<locals>.ThingN©r7   rF   rG   r   r   ©Zdescr   r   r  e  r—   r  r   )r   r»   r:   r‘  )r@   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                   @   rŽ  )z4TestGetattrStatic.test_classAttribute.<locals>.ThingNr  r   r   r   r   r  k  r¸  r  r   r–  ©r@   r  r   r   r   Útest_classAttributej  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   )Ú_xrZ   r   r   r   r   r  ó   z=TestGetattrStatic.test_classVirtualAttribute.<locals>.Thing.xN)r7   rF   rG   rf   r¬  r   r   r¢  r   r   r   r   r  q  s    

r  r   )r   r»   r:   r‘  rc  r   r   r   r   Útest_classVirtualAttributep  s   z,TestGetattrStatic.test_classVirtualAttributec                 C   s:   G dd„ dt ƒ}G dd„ d|ƒ}|  t |d¡|j¡ d S )Nc                   @   rŽ  )z>TestGetattrStatic.test_inherited_classattribute.<locals>.ThingNr  r   r   r   r   r  z  r¸  r  c                   @   r‚   )zCTestGetattrStatic.test_inherited_classattribute.<locals>.OtherThingNrƒ   r   r   r   r   r•  |  r¸   r•  r   r–  ©r@   r  r•  r   r   r   Útest_inherited_classattributey  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   ó
   d| _ d S ©Nr"   rß  rZ   r   r   r   rÄ   …  r™  z4TestGetattrStatic.test_slots.<locals>.Thing.__init__N)r7   rF   rG   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                   @   r‘   )z.TestGetattrStatic.test_metaclass.<locals>.metar"   N)r7   rF   rG   r‹   r   r   r   r   Úmeta  r—   rª  c                   @   r‚   )z/TestGetattrStatic.test_metaclass.<locals>.ThingNrƒ   r   r   r   r   r  ‘  r¸   r  r§   r‹   r"   c                   @   r‚   )z-TestGetattrStatic.test_metaclass.<locals>.subNrƒ   r   r   r   r   Úsub•  r¸   r«  c                   @   r‘   )z4TestGetattrStatic.test_metaclass.<locals>.OtherThingrÐ   Nr  r   r   r   r   r•  —  r—   r•  c                   @   r‚   )z9TestGetattrStatic.test_metaclass.<locals>.OtherOtherThingNrƒ   r   r   r   r   ÚOtherOtherThing›  r¸   r¬  r   rÐ   ©rg   r   r»   r:   r‘  )r@   rª  r  r«  r•  r¬  r   r   r   Útest_metaclassŽ  s   z TestGetattrStatic.test_metaclassc                 C   s.   |   t ddd ¡d ¡ |  t dd¡d ¡ d S )Nr    r"   Úlower)r»   r:   r‘  ÚassertNotEqualrZ   r   r   r   Útest_no_dict_no_slots   s   z'TestGetattrStatic.test_no_dict_no_slotsc                 C   sL   t tdd}|  t |d¡t|ƒj¡ W d   ƒ d S 1 sw   Y  d S )Nró   rô   re  )rö   rØ   r»   r:   r‘  rg   re  )r@   Ú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   r§  r¨  rß  rZ   r   r   r   rÄ   ­  r™  z>TestGetattrStatic.test_inherited_slots.<locals>.Thing.__init__N)r7   rF   rG   r•   rÄ   r   r   r   r   r  «  s    r  c                   @   r‚   )z:TestGetattrStatic.test_inherited_slots.<locals>.OtherThingNrƒ   r   r   r   r   r•  °  r¸   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                   @   r}   )z5TestGetattrStatic.test_descriptor.<locals>.descriptorc                 S   r«  r&  r   ©r@   ÚinstanceÚownerr   r   r   r!  ¸  r   z=TestGetattrStatic.test_descriptor.<locals>.descriptor.__get__Nr  r   r   r   r   rœ  ·  r   rœ  c                       r¶  )z.TestGetattrStatic.test_descriptor.<locals>.FooN©r7   rF   rG   rì   r   ©rœ  r   r   r„  º  r¸  r„  r    rì   c                 S   r/   r   r   )r‡  r)   Úvr   r   r   r†   Å  r‡   z3TestGetattrStatic.test_descriptor.<locals>.<lambda>)r   rc  r»   r:   r‘  r#  ©r@   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                   @   r}   )zDTestGetattrStatic.test_metaclass_with_descriptor.<locals>.descriptorc                 S   r«  r&  r   rµ  r   r   r   r!  Ë  r   zLTestGetattrStatic.test_metaclass_with_descriptor.<locals>.descriptor.__get__Nr  r   r   r   r   rœ  Ê  r   rœ  c                       r¶  )z>TestGetattrStatic.test_metaclass_with_descriptor.<locals>.metaNr¸  r   r¹  r   r   rª  Í  r¸  rª  c                   @   r‚   )z?TestGetattrStatic.test_metaclass_with_descriptor.<locals>.ThingNrƒ   r   r   r   r   r  Ï  r¸   r  r§   rì   )r   rg   r»   r:   r‘  rc  )r@   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                   @   r‘   )z6TestGetattrStatic.test_class_as_property.<locals>.BaserÐ   Nr¤   r   r   r   r   ÚBaseÕ  r—   r¾  c                   @   s   e Zd ZdZedd„ ƒZdS )z;TestGetattrStatic.test_class_as_property.<locals>.SomethingFc                 S   s
   d| _ tS rS  )Úexecutedr   rZ   r   r   r   r  Ú  ó   zETestGetattrStatic.test_class_as_property.<locals>.Something.__class__N)r7   rF   rG   r¿  rY  r  r   r   r   r   Ú	SomethingØ  s    rÁ  r"   rÐ   )r   r»   r:   r‘  r?   r¿  )r@   r¾  rÁ  r¶  r   r   r   Útest_class_as_propertyÔ  s   z(TestGetattrStatic.test_class_as_propertyc                 C   sb   G dd„ dt ƒ}G dd„ dtƒ}G dd„ d||d}|  t |ƒ d¡d	¡ |  t |d¡d	¡ d S )
Nc                   @   r  )z4TestGetattrStatic.test_mro_as_property.<locals>.Metac                 S   s   t fS r   râ  rZ   r   r   r   Ú__mro__æ  r£  z<TestGetattrStatic.test_mro_as_property.<locals>.Meta.__mro__N)r7   rF   rG   rY  rÃ  r   r   r   r   r¨  å  r¶   r¨  c                   @   r‘   )z4TestGetattrStatic.test_mro_as_property.<locals>.BaserÐ   Nr¤   r   r   r   r   r¾  ê  r—   r¾  c                   @   r‚   )z9TestGetattrStatic.test_mro_as_property.<locals>.SomethingNrƒ   r   r   r   r   rÁ  í  r¸   rÁ  r§   r"   rÐ   r­  )r@   r¨  r¾  rÁ  r   r   r   Útest_mro_as_propertyä  s
   z&TestGetattrStatic.test_mro_as_propertyc                    sN   | ‰ dˆ _ G ‡ fdd„dtƒ}|ƒ }d|_|  t |d¡d¡ |  ˆ j ¡ d S )NFc                       s    e Zd ZdZe‡ fdd„ƒZdS )z4TestGetattrStatic.test_dict_as_property.<locals>.FoorÐ   c                    s
   dˆ _ i S rS  )ÚcalledrZ   ©r_  r   r   rc  ù  rÀ  z=TestGetattrStatic.test_dict_as_property.<locals>.Foo.__dict__N)r7   rF   rG   r   rY  rc  r   rÆ  r   r   r„  ÷  s    r„  rD  r   rÐ   )rÅ  r™   r   r»   r:   r‘  r?   r»  r   rÆ  r   Útest_dict_as_propertyó  s   z'TestGetattrStatic.test_dict_as_propertyc                    s`   | ‰ dˆ _ G ‡ fdd„dtƒ}G dd„ dtƒ}|ƒ }|ƒ |_|  t |d¡d¡ |  ˆ j ¡ d S )NFc                       s    e Zd Zd‡ ‡fdd„	Z‡  ZS )z9TestGetattrStatic.test_custom_object_dict.<locals>.CustomNc                    s   dˆ_ tƒ  ||¡ d S rS  )rÅ  r  Úget)r@   Úkeyrz  )r  r_  r   r   rÈ    s   z=TestGetattrStatic.test_custom_object_dict.<locals>.Custom.getr   )r7   rF   rG   rÈ  r  r   rÆ  r  r   ÚCustom  s    rÊ  c                   @   r‘   )z6TestGetattrStatic.test_custom_object_dict.<locals>.FoorÐ   N)r7   rF   rG   r   r   r   r   r   r„    r—   r„  r   rÐ   )rÅ  r™   r   rc  r»   r:   r‘  r?   )r@   rÊ  r„  r"   r   rÆ  r   Útest_custom_object_dict  s   z)TestGetattrStatic.test_custom_object_dictc                 C   sL   G dd„ dt ƒ}G dd„ d|d}|ƒ }|  t |d¡d¡ |  |j¡ d S )Nc                   @   r  )z?TestGetattrStatic.test_metaclass_dict_as_property.<locals>.Metac                 S   r§  rS  )r¿  rZ   r   r   r   rc    s   
zHTestGetattrStatic.test_metaclass_dict_as_property.<locals>.Meta.__dict__N©r7   rF   rG   rY  rc  r   r   r   r   r¨    r¶   r¨  c                   @   r»  )z@TestGetattrStatic.test_metaclass_dict_as_property.<locals>.ThingFc                 S   r§  ©Nr˜   ©rY   rZ   r   r   r   rÄ     r™  zITestGetattrStatic.test_metaclass_dict_as_property.<locals>.Thing.__init__N)r7   rF   rG   r¿  rÄ   r   r   r   r   r    r  r  r§   rY   r˜   )rg   r»   r:   r‘  r?   r¿  )r@   r¨  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   r  r:   r‘  r0  )r@   Ú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 s1w   Y  |  |j¡ d S )	Nc                   @   r  )zWTestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.MetaMetac                 S   s   d| _ tddS )NTr˜   rÎ  )r¿  r™   rZ   r   r   r   rc  *  s   
z`TestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.MetaMeta.__dict__NrÌ  r   r   r   r   ÚMetaMeta)  r¶   rÓ  c                   @   r‘   )zSTestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.MetaFN)r7   rF   rG   r¿  r   r   r   r   r¨  /  r—   r¨  r§   c                   @   r‚   )zTTestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_property.<locals>.ThingNrƒ   r   r   r   r   r  2  r¸   r  rY   )rg   rM  rX  r:   r‘  r?   r¿  )r@   rÓ  r¨  r  r   r   r   Ú3test_metaclass_with_metaclass_with_dict_as_property(  s   ÿzETestGetattrStatic.test_metaclass_with_metaclass_with_dict_as_propertyN)r7   rF   rG   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  7  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   ó    t dƒD ]} | V  qd S ©Nrª   rS   ©Únumberr   r   r   Únumber_generator<  rV   z5TestGetGeneratorState.setUp.<locals>.number_generator)Ú	generator)r@   rÚ  r   r   r   rü   ;  s   zTestGetGeneratorState.setUpc                 C   ó   t  | j¡S r   )r:   ZgetgeneratorstaterÛ  rZ   r   r   r   Ú_generatorstateA  rA  z%TestGetGeneratorState._generatorstatec                 C   ó   |   |  ¡ tj¡ d S r   )r»   rÝ  r:   ZGEN_CREATEDrZ   r   r   r   Útest_createdD  rs  z"TestGetGeneratorState.test_createdc                 C   s    t | jƒ |  |  ¡ tj¡ d S r   )ÚnextrÛ  r»   rÝ  r:   ZGEN_SUSPENDEDrZ   r   r   r   Útest_suspendedG  s   
z$TestGetGeneratorState.test_suspendedc                 C   s"   | j D ]}q|  |  ¡ tj¡ d S r   )rÛ  r»   rÝ  r:   Ú
GEN_CLOSEDrT   r   r   r   Útest_closed_after_exhaustionK  s   
z2TestGetGeneratorState.test_closed_after_exhaustionc                 C   óL   |   t¡ | j t¡ W d   ƒ n1 sw   Y  |  |  ¡ tj¡ d S r   )rM  r"  rÛ  r0   r»   rÝ  r:   râ  rZ   r   r   r   Ú%test_closed_after_immediate_exceptionP  ó   ÿ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Ý  r:   ZGEN_RUNNINGrØ  rZ   r   r   Úrunning_check_generatorZ  s   €ýzCTestGetGeneratorState.test_running.<locals>.running_check_generator)rÛ  rà  )r@   rç  r   rZ   r   Útest_runningU  s   
z"TestGetGeneratorState.test_runningc                 C   ó@   d  ¡ }|D ]}tt|ƒ}|  |t|ƒ¡ |  |t|ƒ¡ qd S )Nz0GEN_CREATED GEN_RUNNING GEN_SUSPENDED GEN_CLOSED©rÿ   rž  r:   r›   Úreprr/  ©r@   Únamesre  Ústater   r   r   Útest_easy_debugginge  ó   
ý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ye   Y nw |   t |¡i ¡ d S )Nc                 s   s&    d}| D ]}|dkrd}|V  qd S )NrN  rÐ   rq  r   )Úlstr   r“   rº  r   r   r   r   Úeachn  s   €ýz;TestGetGeneratorState.test_getgeneratorlocals.<locals>.eachrN  )r   rñ  r    )r   rñ  rº  r“   r!   rÐ   rq  )r   rñ  rº  r“   r   r   ©r»   r:   Úgetgeneratorlocalsrà  ÚStopIteration)r@   rò  Znumbersr   r   r   Útest_getgeneratorlocalsm  s:   
ÿ
ÿÿ
ÿÿ
ÿÿÿz-TestGetGeneratorState.test_getgeneratorlocalsc                 C   sV   dd„ }|ƒ }|   t |¡i ¡ zt|ƒ W n	 ty   Y nw |   t |¡i ¡ d S )Nc                   s   s    dV  d S rr   r   r   r   r   r   Ú	yield_one‹  s   €
zFTestGetGeneratorState.test_getgeneratorlocals_empty.<locals>.yield_oneró  )r@   r÷  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   r«  rS  r   rß  r   r   r   r†   —  r‡   zETestGetGeneratorState.test_getgeneratorlocals_error.<locals>.<lambda>)r!   rÐ   )rM  rN  r:   rô  r9   rZ   r   r   r   Útest_getgeneratorlocals_error•  s   z3TestGetGeneratorState.test_getgeneratorlocals_errorN)r7   rF   rG   rü   rÝ  rß  rá  rã  rå  rè  rï  rö  rø  rù  r   r   r   r   rÕ  9  s    rÕ  c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestGetCoroutineStatec                    s&   t jdd„ ƒ‰ ‡ fdd„}|ƒ | _d S )Nc                  s   rÖ  r×  rS   rØ  r   r   r   Únumber_coroutineŸ  s   €ÿz5TestGetCoroutineState.setUp.<locals>.number_coroutinec                   “   s   ˆ ƒ I d H  d S r   r   r   ©rû  r   r   Ú	coroutine£  s   €z.TestGetCoroutineState.setUp.<locals>.coroutine)rf   rý  )r@   rý  r   rü  r   rü   ž  s   
zTestGetCoroutineState.setUpc                 C   s   | j  ¡  d S r   )rý  rw   rZ   r   r   r   r  §  r   zTestGetCoroutineState.tearDownc                 C   rÜ  r   )r:   Zgetcoroutinestaterý  rZ   r   r   r   Ú_coroutinestateª  rA  z%TestGetCoroutineState._coroutinestatec                 C   rÞ  r   )r»   rþ  r:   ZCORO_CREATEDrZ   r   r   r   rß  ­  rs  z"TestGetCoroutineState.test_createdc                 C   s"   | j  d ¡ |  |  ¡ tj¡ d S r   )rý  Úsendr»   rþ  r:   ZCORO_SUSPENDEDrZ   r   r   r   rá  °  s   z$TestGetCoroutineState.test_suspendedc                 C   s>   	 z| j  d ¡ W n	 ty   Y nw q|  |  ¡ tj¡ d S r   )rý  rÿ  rõ  r»   rþ  r:   ÚCORO_CLOSEDrZ   r   r   r   rã  ´  s   ÿýz2TestGetCoroutineState.test_closed_after_exhaustionc                 C   rä  r   )rM  r"  rý  r0   r»   rþ  r:   r   rZ   r   r   r   rå  ½  ræ  z;TestGetCoroutineState.test_closed_after_immediate_exceptionc                 C   ré  )Nz4CORO_CREATED CORO_RUNNING CORO_SUSPENDED CORO_CLOSEDrê  rì  r   r   r   rï  Â  rð  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   r{   r   r   r   r   r   r   ÚgencoroË  s   €
z>TestGetCoroutineState.test_getcoroutinelocals.<locals>.gencoroc                 “   s   d}ˆ I d H  d S rX   r   r’   ©r  r   r   rÏ  Ð  s   €z;TestGetCoroutineState.test_getcoroutinelocals.<locals>.func)r   r  rY   )r   r  r“   r   )rf   rý  r»   r:   Zgetcoroutinelocalsrÿ  )r@   rÏ  ry   r   r  r   Útest_getcoroutinelocalsÊ  s   
ÿ

ÿz-TestGetCoroutineState.test_getcoroutinelocalsN)r7   rF   rG   rü   r  rþ  rß  rá  rã  rå  rï  r  r   r   r   r   rú  œ  s    		rú  c                   @   r‚   )ÚMySignatureNrƒ   r   r   r   r   r  Ü  ó    r  c                   @   r‚   )ÚMyParameterNrƒ   r   r   r   r   r  á  r  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„ Z0dTdU„ Z1dVdW„ Z2dXdY„ Z3dZS )[ÚTestSignatureObjectc                 K   sB   t j| fi |¤Ž}tdd„ |j ¡ D ƒƒ|j|ju rdfS |jfS )Nc                 s   sL    | ]!}|j |j|ju rd n|j|j|ju rd n|jt|jƒ ¡ fV  qdS ).N)re  rz  ÚemptyÚ
annotationr/  ry  r¯  )r  Úparamr   r   r   Ú	<genexpr>ì  s   € ûüz0TestSignatureObject.signature.<locals>.<genexpr>.)r:   r  Útupler(   ÚvaluesÚreturn_annotationr  )rÏ  ÚkwÚsigr   r   r   r  é  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 ssw   Y  |  
td¡ |||	||
|fƒ W d   ƒ n1 s’w   Y  |  
td¡ ||	|||
|fƒ W d   ƒ n1 s±w   Y  |  
td¡ ||||	||
fƒ W d   ƒ n1 sÐw   Y  |jdd}|  
td¡ ||||	||
fƒ W d   ƒ n1 sõw   Y  |  
td¡ |||fƒ W d   ƒ n	1 sw   Y  |  
td¡ ||||fƒ W d   ƒ n	1 s0w   Y  |  
td¡ |||fƒ W d   ƒ n	1 sMw   Y  |  t|ƒ d¡¡ |  dt|ƒv ¡ d S )Nú()zmappingproxy(OrderedDict())r˜   éd   c                _   r/   r   r   )ÚpoÚpkÚpodÚpkdÚkor   rÈ   r   r   r   r_  ü  r   z7TestSignatureObject.test_signature_object.<locals>.testr  r|  r  r  r  r   r  rÈ   zwrong parameter order©re  zduplicate parameter namezfollows default argumentz
<Signaturez(po, pk)r˜   r  )r:   rd  rb  r»   r/  rë  r(   r  Úreplacerc  rÌ  rE  r6   rP  )r@   ÚSÚPr_  r  r  r  r  r  r   r  rÈ   Zkwargs2r   r   r   Útest_signature_objectõ  sR   






ÿÿÿÿÿÿÿÿz)TestSignatureObject.test_signature_objectc           	   	   C   s„  i dœdddddifdd„}t j|dd	}t |¡}ttjd ƒD ](}| j|d
d t t 	||¡¡}|  
||¡ W d   ƒ n1 sDw   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 ];}| j|dd* t t 	||¡¡}|  
||¡ |  t|tƒ¡ |  t|jd tƒ¡ W d   ƒ n1 sºw   Y  q„d S )N©r   r   r    rg  r˜   rQ  c                [   r/   r   r   ©r   r“   r   r  r   r   r   r"   &	  r‡   z=TestSignatureObject.test_signature_object_pickle.<locals>.foorh  F)Ú
pickle_verÚsubclassr   )re  ry  )r(   r  T)rs   rt   r:   r  r#   ÚpickleÚHIGHEST_PROTOCOLÚsubTestÚloadsÚdumpsr»   r  rb  rc  ÚcollectionsÚOrderedDictr(   r  r  r  r  r6   rŸ  )	r@   r"   Zfoo_partialr  ÚverZsig_pickledZmyparamZmyparamsZmysigr   r   r   Útest_signature_object_pickle%	  s8   
þ€
ÿÿü€ÿz0TestSignatureObject.test_signature_object_picklec                 C   s|   dd„ }t  |¡}|  t¡ d|_W d   ƒ n1 sw   Y  |  t¡ d |jd< W d   ƒ d S 1 s7w   Y  d S )Nc                 S   r/   r   r   rh  r   r   r   r_  B	  r   z=TestSignatureObject.test_signature_immutability.<locals>.testr   r   )r:   r  rM  rX  r"   rN  r(   ©r@   r_  r  r   r   r   Útest_signature_immutabilityA	  s   
ÿ"ÿz/TestSignatureObject.test_signature_immutabilityc                 C   s   dd„ }|   |  |¡d¡ d S )Nc                   S   r/   r   r   r   r   r   r   r_  M	  r   z9TestSignatureObject.test_signature_on_noarg.<locals>.test©r   .©r»   r  ©r@   r_  r   r   r   Útest_signature_on_noargL	  s   z+TestSignatureObject.test_signature_on_noargc                 C   s    ddd„}|   |  |¡d¡ d S )	Nr“   r"   rg  r{  c                 S   r/   r   r   r’   r   r   r   r_  R	  r   z9TestSignatureObject.test_signature_on_wargs.<locals>.test))©r   ..Úpositional_or_keyword)r“   .r"   r1  r{  )r“   r"   rg  r{  r-  r.  r   r   r   Útest_signature_on_wargsQ	  s   
ÿz+TestSignatureObject.test_signature_on_wargsc                 C   sD   dt dtdtfdd„}|  |  |¡ddt dfddtdfftf¡ d S )Nr   r“   rg  c                 S   r/   r   r   r’   r   r   r   r_  Z	  r   z;TestSignatureObject.test_signature_on_wkwonly.<locals>.test.Úkeyword_only)Úfloatr/  r­   r»   r  r.  r   r   r   Útest_signature_on_wkwonlyY	  s   

ÿþÿz-TestSignatureObject.test_signature_on_wkwonlyc                 C   sP   dddœdddddd	d
t fdd„}|  |  |¡dddddd
dt dffdf¡ d S )Nr„  r{  )rQ  r“   r"   r   r   rY   ÚbazrÈ   c                _   r/   r   r   )r   r“   rY   rQ  r   rÈ   r   r   r   r_  b	  r   z@TestSignatureObject.test_signature_on_complex_args.<locals>.testr0  )r“   r„  r"   r1  )r   .r   Úvar_positional)rY   .r6  r3  )rQ  r{  .r3  .Úvar_keyword©r„  )r­   r»   r  r.  r   r   r   Útest_signature_on_complex_argsa	  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   r/   r   r   r   r   r   r   Útest_args_onlyn	  r   zGTestSignatureObject.test_signature_without_self.<locals>.test_args_onlyc                  _   r/   r   r   ©r   rÈ   r   r   r   Útest_args_kwargs_onlyq	  r   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   r/   r   r   r   r   r   r   Útest_classmethodu	  r3   zKTestSignatureObject.test_signature_without_self.<locals>.A.test_classmethodc                  W   r/   r   r   r   r   r   r   Útest_staticmethody	  r3   zLTestSignatureObject.test_signature_without_self.<locals>.A.test_staticmethodr    N)r7   rF   rG   rŒ  r>  r‹  r?  rs   rW  r~  r  r€  r  r   ©r=  r;  r   r   r+  t	  s    

r+  ©)©r   ..r7  .©)rB  ©rÈ   ..r8  .)r»   r  r~  r  r€  r  r…  r   r@  r   Útest_signature_without_selfm	  s*   ÿÿÿÿÿÿz/TestSignatureObject.test_signature_without_selfrl  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ƒtjd ¡ |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Êw   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   r@   )
r:   r  r6   rŸ  rd  r»   rŽ   r(   r  re  ©r   r  rZ   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   r@   )
r:   r  r6   rŸ  rd  r(   r°  rŽ   r  re  rF  rZ   r   r   Útest_callable	  s
   
zETestSignatureObject.test_signature_on_builtins.<locals>.test_callablec                    s   ˆ j |  jS r   )r(   rz  r  )r  r   r   r*   ¦	  r…   z9TestSignatureObject.test_signature_on_builtins.<locals>.pr‡  rv  r“   s   bytesrì   g…ëQ¸	@r)   é#   Únr'  Trí   FÚlocalrÐ   r0  rB   r    s   abczno signature foundc                   @   s   e Zd ZeZdS )zDTestSignatureObject.test_signature_on_builtins.<locals>.ThisWorksNowN)r7   rF   rG   rg   rU  r   r   r   r   ÚThisWorksNowÎ	  r—   rL  )rw  rx  r»   r0  Úmaxsizer   ro  rp  rq  rr  ÚStringIOÚbytesÚ	maketransr™   Úfromkeysrg   rU  r­   rš  ÚminrÌ  rE  Ú__delitem__rY  r  Z#docstring_with_signature_but_no_doc)r@   rw  rG  rH  r*   rì   rL  r   rˆ  r   Útest_signature_on_builtins	  sD   









ý

z.TestSignatureObject.test_signature_on_builtinsc                 C   sd   dd l }|j}dd„ }||ƒ}|  t |¡t |¡¡ dtfdd„}|  tj|ddt |¡¡ d S )	Nr   c                    ó    t  ˆ ¡dtf‡ fdd„ƒ}|S )Nrg  c                     ó   ˆ | i |¤ŽS r   r   r<  rO  r   r   r÷  á	  ó   z\TestSignatureObject.test_signature_on_decorated_builtins.<locals>.decorator.<locals>.wrapper©rs   rV  r­   ©rÏ  r÷  r   rO  r   Ú	decoratorà	  ó   zKTestSignatureObject.test_signature_on_decorated_builtins.<locals>.decoratorrg  c                  _   r/   r   r   r<  r   r   r   Úwrapper_likeë	  r‡   zNTestSignatureObject.test_signature_on_decorated_builtins.<locals>.wrapper_likeF©Zfollow_wrapped)rw  rx  r»   r:   r  r­   )r@   rw  rÏ  rZ  Zdecorated_funcr\  r   r   r   Ú$test_signature_on_decorated_builtinsÙ	  s   ÿ
ÿþz8TestSignatureObject.test_signature_on_decorated_builtinsc                 C   s|   dd l }|  td¡ t |j¡ W d   ƒ n1 sw   Y  |  td¡ t t¡ W d   ƒ d S 1 s7w   Y  d S )Nr   zno signature found for builtin)rw  rÌ  rE  r:   r  r{  r/  )r@   rw  r   r   r   Ú'test_signature_on_builtins_no_signatureð	  s   ÿþÿ"þz;TestSignatureObject.test_signature_on_builtins_no_signaturec                 C   s<   |   td¡ t d¡ W d   ƒ d S 1 sw   Y  d S )Núis not a callable objectr˜   )rÌ  rN  r:   r  rZ   r   r   r   Útest_signature_on_non_functionû	  s   "ÿz2TestSignatureObject.test_signature_on_non_functionc                    s  ddœdd„}G dd„ dƒ}t j |¡}t j ||ƒ¡}|  ||¡ t  ||ƒ¡}|  ||¡ ||ƒ}|`|  |  |¡d¡ t j‰ ‡ fdd	„}tj 	d
|¡) ||ƒ}|  
t  |¡¡ d|_|  t  |¡¡ |  t  |¡|¡ W d   ƒ d S 1 szw   Y  d S )NT©Úkwonlyc                _   r/   r   r   ©r   r“   rc  Z	kwonlyreqr   rÈ   r   r   r   rÏ   
  r   zITestSignatureObject.test_signature_from_functionlike_object.<locals>.funcc                   @   r—  )zMTestSignatureObject.test_signature_from_functionlike_object.<locals>.funclikec                 S   ó2   |j | _ |j| _|j| _|j| _|j| _|| _d S r   ©r7   rd  ri  Ú__defaults__Ú__kwdefaults__rÏ  ©r@   rÏ  r   r   r   rÄ   
  ó   
zVTestSignatureObject.test_signature_from_functionlike_object.<locals>.funclike.__init__c                 _   ó   | j |i |¤ŽS r   rO  rÇ   r   r   r   rU  
  r  zVTestSignatureObject.test_signature_from_functionlike_object.<locals>.funclike.__call__N©r7   rF   rG   rÄ   rU  r   r   r   r   Úfunclike
  ó    rm  rC  c                    s   t | dƒrdS ˆ | ƒS )NÚ_builtinmockT©re   )rC   ©Z_orig_isdescr   r   Ú_isdesc'
  s   
zLTestSignatureObject.test_signature_from_functionlike_object.<locals>._isdesczinspect.ismethoddescriptor)r:   rd  Úfrom_callabler»   r  rg  rä  ru   rv   r7  r?   ro  r6   )r@   rÏ  rm  Zsig_funcZsig_funclikeZflrr  Zbuiltin_funcr   rq  r   Ú'test_signature_from_functionlike_objectÿ	  s*   ÿ"úz;TestSignatureObject.test_signature_from_functionlike_objectc                    s:   ddœdd„‰ G ‡ fdd„dƒ}|   tt |¡ƒd¡ d S )NTrb  c                _   r/   r   r   rd  r   r   r   rÏ  8
  r   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   r/   r   r   )r@   Zmarkerr   r   r   rÄ   <
  r   zPTestSignatureObject.test_signature_functionlike_class.<locals>.funclike.__init__N)r7   rF   rG   rÄ   rd  ri  rg  rh  r   rO  r   r   rm  ;
  s    
rm  z(marker))r»   r/  r:   r  )r@   rm  r   rO  r   Ú!test_signature_functionlike_class4
  s   
z5TestSignatureObject.test_signature_functionlike_classc                 C   sŽ   G dd„ dƒ}|   |  |ƒ j¡dtf¡ |   |  |ƒ j¡d¡ |   |  |¡d¡ |  td¡ |  |ƒ ¡ W d   ƒ d S 1 s@w   Y  d S )Nc                   @   s4   e Zd Zdd„ Zddefdd„Zdd„ Zd	d
„ ZdS )z:TestSignatureObject.test_signature_on_method.<locals>.Testc                  W   r/   r   r   r   r   r   r   rÄ   I
  r   zCTestSignatureObject.test_signature_on_method.<locals>.Test.__init__r    rg  c                 S   r/   r   r   ©r@   rJ  rK  r   r   r   r‰  K
  r   z=TestSignatureObject.test_signature_on_method.<locals>.Test.m1c                  W   r/   r   r   r   r   r   r   Úm2M
  r   z=TestSignatureObject.test_signature_on_method.<locals>.Test.m2c                 S   r/   r   r   rh  r   r   r   rU  O
  r   zCTestSignatureObject.test_signature_on_method.<locals>.Test.__call__Nr  )r7   rF   rG   rÄ   r­   r‰  rw  rU  r   r   r   r   r$  H
  s
    r$  ©©rJ  ..r1  )rK  r    .r1  rA  zinvalid method signature)r»   r  r‰  r­   rw  rÌ  rE  )r@   r$  r   r   r   Útest_signature_on_methodG
  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defdd„ZdS )zETestSignatureObject.test_signature_wrapped_bound_method.<locals>.Testr    rg  c                 S   r/   r   r   rv  r   r   r   r‰  e
  r   zHTestSignatureObject.test_signature_wrapped_bound_method.<locals>.Test.m1Nr  )r7   rF   rG   r­   r‰  r   r   r   r   r$  d
  r©  r$  c                  _   r/   r   r   r<  r   r   r   Úm1dg
  r3   zDTestSignatureObject.test_signature_wrapped_bound_method.<locals>.m1drx  )rs   rV  r‰  r»   r  r­   )r@   r$  r{  r   r   r   Ú#test_signature_wrapped_bound_methodb
  s   
þÿz7TestSignatureObject.test_signature_wrapped_bound_methodc                 C   óD   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    rF  c                S   r/   r   r   )r°   rJ  rK  r   r   r   r"   q
  r3   zCTestSignatureObject.test_signature_on_classmethod.<locals>.Test.fooN)r7   rF   rG   rŒ  r"   r   r   r   r   r$  p
  s    r$  ))ry  )rK  r    .r3  .©r"   r»   r  ©r@   r$  Úmethr   r   r   Útest_signature_on_classmethodo
  ó   ÿÿz1TestSignatureObject.test_signature_on_classmethodc                 C   r}  )Nc                   @   r  )z@TestSignatureObject.test_signature_on_staticmethod.<locals>.Testc                S   r/   r   r   )r°   rL  r   r   r   r"   ƒ
  r3   zDTestSignatureObject.test_signature_on_staticmethod.<locals>.Test.fooN)r7   rF   rG   r‹  r"   r   r   r   r   r$  ‚
  r¶   r$  )))r°   ..r1  )rL  ..r3  .r~  r  r   r   r   Útest_signature_on_staticmethod
  r‚  z2TestSignatureObject.test_signature_on_staticmethodc           
      C   sŠ  ddl m} tj}dd„ }|  |  ||ƒ¡d¡ |  td¡ t ||dƒ¡ W d   ƒ n1 s1w   Y  |  td¡ t ||dd¡ W d   ƒ n1 sPw   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¡ dtdd f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   )rt   c                   S   r/   r   r   r   r   r   r   r_  ˜
  r   z;TestSignatureObject.test_signature_on_partial.<locals>.testr,  úhas incorrect argumentsr    rh  c                S   r/   r   r   rM  r   r   r   r_  £
  r   ))r0  ©r“   ..r1  ©r   ..r3  ©rì   ..r3  .))r…  r†  r‡  .r!   r  ))r…  ©r   r!   .r3  r‡  .)r“   r   ))r0  ©r“   r    .r3  rˆ  r‡  .))r‰  rˆ  r‡  .))©r   r    .r3  ©r“   ..r3  r†  r‡  .c                _   r/   r   r   )r   r“   r   rÈ   r   r   r   r_  Í
  r   ))rB  r‹  rD  .))rŠ  r‹  rD  .rÐ   TrÆ  )r_  r“   ))rB  ©r“   r   .r3  rD  .©r“   ))r0  rB  rŒ  rD  .)r“   r_  r   rg  r˜   c                 S   r/   r   r   rò  r   r   r   r_  ü
  r   r…  .r1  c                 S   ó   | S r   r   rh  r   r   r   r"     r   z:TestSignatureObject.test_signature_on_partial.<locals>.foor„  é   )))r   r  .r3  .c                 S   ó
   | ||fS r   r   rò  r   r   r   r"     r™  r’  )))r“   r’  .r3  r†  .)r    r’  r„  c                S   ó   | |||fS r   r   rM  r   r   r   r"      rA  )rì   r   )r“   rì   ))r0  )r“   r„  .r3  )r   r  .r3  )rì   r’  .r3  .éÈ   râ   r’   )r’  râ   r  r’  c                 S   r  r   r   rò  r   r   r   r"   -  r™  é   )râ   r!   r“  rq  )râ   rq  r“  )r    rq  r“  )rq  r„  r  c                 [   r/   r   r   )r   r“   r   rì   rÈ   r   r   r   r"   B  r   r   r|  r“   z(a, b, /, c, d, **kwargs)))©r“   ..Zpositional_only©r   ..r1  ©rì   ..r1  rD  .))r•  r–  rD  .))r–  rD  .))©r   rÐ   .r3  r‡  rD  .))r”  r—  r‡  rD  .rN  )rs   rt   r:   rb  r»   r  rÌ  rE  r­   re  Úbindr   rÈ   r(   Úcopyr  rc  rd  r  r/  )
r@   rt   rb  r_  r  Zpsigr"   Z_fooÚbaÚparamsr   r   r   Útest_signature_on_partial“
  sò   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿþÿÿÿÿÿÿ



ÿÿÿÿÿz-TestSignatureObject.test_signature_on_partialc                    sÈ   ddl m‰  G ‡ fdd„dƒ}|  td¡ t |j¡ W d   ƒ n1 s&w   Y  G ‡ fdd„dƒ}|  | j|jddd	¡ |  | j|ƒ jddd
¡ G ‡ fdd„dƒ}|  | j|jddd¡ d S )Nr   ©rW  c                       s   e Zd Zdd„ Z” eƒZdS )úATestSignatureObject.test_signature_on_partialmethod.<locals>.Spamc                   S   r/   r   r   r   r   r   r   r_  o  r   úFTestSignatureObject.test_signature_on_partialmethod.<locals>.Spam.testN©r7   rF   rG   r_  rQ  r   r  r   r   ÚSpamn  s    r¡  r„  c                       s"   e Zd Zddd„Z” eddZdS )	rž  rg  rY   c                S   r/   r   r   )Úitr   r   r   r   r   r_  w  r   rŸ  r    r  N)rg  rY   r   r   r  r   r   r¡  v  s    
Fró  )))r¢  ..r1  r0  ©r   r    .r3  rY   ))r0  r£  rY   c                       s    e Zd Zddd„Z” edƒZdS )rž  r@   Úannoc                 S   r/   r   r   r˜  r   r   r   r_  ‡  r   rŸ  r    N)r@   r¤  )r7   rF   rG   r_  rî   r   r  r   r   r¡  †  s    
)))r@   .r¤  r1  .)	rs   rW  rÌ  rE  r:   r  rQ  r»   rî   )r@   r¡  r   r  r   Útest_signature_on_partialmethodk  s    ÿÿÿÿz3TestSignatureObject.test_signature_on_partialmethodc                 C   s(   dd„ }d|_ |  tt |¡ƒd¡ d S )Nc                 S   r/   r   r   rh  r   r   r   r"   ‘  r‡   zETestSignatureObject.test_signature_on_fake_partialmethod.<locals>.foorY   z(a))Ú_partialmethodr»   r/  r:   r  ©r@   r"   r   r   r   Ú$test_signature_on_fake_partialmethod  s   z8TestSignatureObject.test_signature_on_fake_partialmethodc                    sä   dd„ ‰ G ‡ fdd„dƒ}ˆ |ƒ j ƒ}|  |  |j ¡d¡ |  |  |ƒ j ¡d¡ |  | j|j ddd	¡ |  |  |¡d¡ d
d„ ‰ G ‡ fdd„dƒ}|  |  |j¡d¡ |  |  |ƒ j¡d¡ dd„ }|j|_|  |  |¡d¡ d S )Nc                    rU  )Nrg  c                     rV  r   r   r<  rO  r   r   r÷  —  rW  úSTestSignatureObject.test_signature_on_decorated.<locals>.decorator.<locals>.wrapperrX  rY  r   rO  r   rZ  –  r[  zBTestSignatureObject.test_signature_on_decorated.<locals>.decoratorc                       r£   )ú<TestSignatureObject.test_signature_on_decorated.<locals>.Fooc                 S   r/   r   r   ©r@   r   r“   r   r   r   r     r3   z@TestSignatureObject.test_signature_on_decorated.<locals>.Foo.barN)r7   rF   rG   r   r   ©rZ  r   r   r„  œ  r¶   r„  ))©r@   ..r1  r0  r…  .))r0  r…  .Fr]  rC  c                    sN   t  ˆ ¡dtf‡ fdd„ƒ}t ˆ ¡}t|j ¡ ƒdd … }|j|d|_	|S )Nrg  c                     s   ˆ dg| ¢R i |¤ŽS rÍ  r   r<  rO  r   r   r÷  ¼  s   r©  r    r`  )
rs   rV  r­   r:   r  r  r(   r  r  re  )rÏ  r÷  r  Ú
new_paramsr   rO  r   rZ  »  s   
c                       r£   )rª  c                 S   r/   r   r   r«  r   r   r   rU  Å  r3   zETestSignatureObject.test_signature_on_decorated.<locals>.Foo.__call__N©r7   rF   rG   rU  r   r¬  r   r   r„  Ä  r¶   ©)r…  .c                   S   r/   r   r   r   r   r   r   Úwrapped_foo_callÓ  r   zITestSignatureObject.test_signature_on_decorated.<locals>.wrapped_foo_call)r   r»   r  rU  Ú__wrapped__)r@   r„  r   r±  r   r¬  r   Útest_signature_on_decorated•  s8   ÿÿÿÿ	ÿÿÿ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                   @   r}   )ú6TestSignatureObject.test_signature_on_class.<locals>.Cc                 S   r/   r   r   ©r@   r   r   r   r   rÄ   ß  r   ú?TestSignatureObject.test_signature_on_class.<locals>.C.__init__N©r7   rF   rG   rÄ   r   r   r   r   r–   Þ  r   r–   ©)r0  .c                   @   r}   )ú7TestSignatureObject.test_signature_on_class.<locals>.CMc                 S   r/   r   r   )r°   r   r   r   r   rU  ç  r   z@TestSignatureObject.test_signature_on_class.<locals>.CM.__call__Nr¯  r   r   r   r   rZ  æ  r   rZ  c                   @   r}   )r´  c                 S   r/   r   r   ©r@   r“   r   r   r   rÄ   ê  r   r¶  Nr·  r   r   r   r   r–   é  r   r§   c                       ó"   e Zd Zddœ‡ fdd„
Z‡  ZS )r¹  r    r  c                   ó   t ƒ  | |||¡S r   ©r  rZ  ©Úmclsre  ÚbasesÚdctr"   r  r   r   rZ  ò  r1  ú?TestSignatureObject.test_signature_on_class.<locals>.CM.__new__©r7   rF   rG   rZ  r  r   r   r  r   rZ  ñ  ó    c                   @   r}   )r´  c                 S   r/   r   r   rº  r   r   r   rÄ   õ  r   r¶  Nr·  r   r   r   r   r–   ô  r   r°  ))©re  ..r1  ©rÀ  ..r1  ©rÁ  ..r1  )r"   r    .r3  .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                   r¼  r   r½  r¾  r  r   r   rZ    r1  z@TestSignatureObject.test_signature_on_class.<locals>.CMM.__new__c                 S   s   t |||ƒS r   )rg   )r°   ÚnmÚbsÚdtr   r   r   rU    rA  zATestSignatureObject.test_signature_on_class.<locals>.CMM.__call__)r7   rF   rG   rZ  rU  r  r   r   r  r   ÚCMM  s    rË  c                       r»  )r¹  r!   ©r   c                   r¼  r   r½  )r¿  re  rÀ  rÁ  r   r  r   r   rZ  	  r1  rÂ  rÃ  r   r   r  r   rZ    rÄ  c                   @   r}   )r´  c                 S   r/   r   r   rº  r   r   r   rÄ     r   r¶  Nr·  r   r   r   r   r–     r   )))rÈ  ..r1  )rÉ  ..r1  )rÊ  ..r1  .c                       r»  )r¹  r!   rÌ  c                   s   t ƒ  |||¡S r   )r  rÄ   )r°   re  rÀ  rÁ  r   r  r   r   rÄ   !  r  z@TestSignatureObject.test_signature_on_class.<locals>.CM.__init__)r7   rF   rG   rÄ   r  r   r   r  r   rZ     rÄ  c                   @   r}   )r´  c                 S   r/   r   r   rº  r   r   r   rÄ   $  r   r¶  Nr·  r   r   r   r   r–   #  r   ))rÅ  rÆ  rÇ  )r   r!   .r3  .)r»   r  rg   )r@   r–   rZ  rË  r   r   r   Útest_signature_on_classÝ  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                 _   ó
   t  | ¡S r   ©r   rZ  )r°   r   r   rÈ   r   r   r   rZ  0  r™  zATestSignatureObject.test_signature_on_subclass.<locals>.A.__new__Nr  ©r7   rF   rG   rZ  r   r   r   r   r+  /  r  r+  c                   @   r}   )z9TestSignatureObject.test_signature_on_subclass.<locals>.Bc                 S   r/   r   r   rº  r   r   r   rÄ   3  r   zBTestSignatureObject.test_signature_on_subclass.<locals>.B.__init__Nr·  r   r   r   r   r,  2  r   r,  c                   @   s   e Zd Zddd„ZdS )z9TestSignatureObject.test_signature_on_subclass.<locals>.Cr    r!   c                 _   rÎ  r   rÏ  )r°   r   r“   r   rÈ   r   r   r   rZ  6  r™  zATestSignatureObject.test_signature_on_subclass.<locals>.C.__new__N©r    r!   rÐ  r   r   r   r   r–   5  r  r–   c                   @   r‚   )z9TestSignatureObject.test_signature_on_subclass.<locals>.DNrƒ   r   r   r   r   r-  8  r¸   r-  r°  ))©r   r    .r1  )r“   r!   .r1  rB  rD  .))rÒ  rB  rD  .r-  )r@   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ÚTypeVarrU  c                   @   s   e Zd Zdeddfdd„ZdS )zATestSignatureObject.test_signature_on_generic_subclass.<locals>.Ar   rg  Nc                S   r/   r   r   rµ  r   r   r   rÄ   P  r   zJTestSignatureObject.test_signature_on_generic_subclass.<locals>.A.__init__)r7   rF   rG   r­   rÄ   r   r   r   r   r+  O  ó    r+  r   .r3  )ÚtypingrÔ  rÕ  r»   r  r­   )r@   rÔ  rÕ  rU  r+  r   r   r   Ú"test_signature_on_generic_subclassJ  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 sOw   Y  |  td¡ |   t |¡d ¡ W d   ƒ d S 1 sow   Y  d S )	Nc                   @   r‚   ©zCTestSignatureObject.test_signature_on_class_without_init.<locals>.CNrƒ   r   r   r   r   r–   [  r…   r–   r  c                   @   r‚   ©zCTestSignatureObject.test_signature_on_class_without_init.<locals>.DNrƒ   r   r   r   r   r-  ]  r…   r-  c                   @   r‚   rÙ  rƒ   r   r   r   r   r–   a  r…   c                   @   r‚   rÚ  rƒ   r   r   r   r   r-  b  r…   zcallable.*is not supported)r»   r/  r:   r  rg   rÌ  rE  )r@   r–   r-  r   r   r   Ú$test_signature_on_class_without_initW  s   ÿ"ÿ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                   @   r‚   )z>TestSignatureObject.test_signature_on_builtin_class.<locals>.PNrƒ   r   r   r   r   r  o  r…   r  c                   @   r‚   )zGTestSignatureObject.test_signature_on_builtin_class.<locals>.EmptyTraitNrƒ   r   r   r   r   Ú
EmptyTraitp  r…   rÜ  c                   @   r‚   )z?TestSignatureObject.test_signature_on_builtin_class.<locals>.P2Nrƒ   r   r   r   r   ÚP2q  r…   rÝ  c                   @   r}   )z?TestSignatureObject.test_signature_on_builtin_class.<locals>.P3c                 S   r/   r   r   )r@   rY   r   r   r   rÄ   v  r   zHTestSignatureObject.test_signature_on_builtin_class.<locals>.P3.__init__Nr·  r   r   r   r   ÚP3u  r   rÞ  ra  c                   @   r}   )zBTestSignatureObject.test_signature_on_builtin_class.<locals>.MetaPc                 S   r/   r   r   )r°   r"   r   r   r   r   rU  {  r   zKTestSignatureObject.test_signature_on_builtin_class.<locals>.MetaP.__call__Nr¯  r   r   r   r   ÚMetaPz  r   rß  c                   @   r‚   )z?TestSignatureObject.test_signature_on_builtin_class.<locals>.P4Nrƒ   r   r   r   r   ÚP4}  r¸   rà  r§   z
(foo, bar))r»   r/  r:   r  ro  rp  rg   )r@   r.  r  rÜ  rÝ  rÞ  rß  rà  r   r   r   Útest_signature_on_builtin_classh  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/w   Y  G dd„ d||ƒ}|   |  |ƒ ¡d¡ G d	d
„ d
ƒ}dd„ |_|   |  |¡d¡ ||_|  td¡ |  |¡ W d   ƒ d S 1 svw   Y  d S )Nc                   @   r}   )zCTestSignatureObject.test_signature_on_callable_objects.<locals>.Fooc                 S   r/   r   r   rµ  r   r   r   rU  ƒ  r   zLTestSignatureObject.test_signature_on_callable_objects.<locals>.Foo.__call__Nr¯  r   r   r   r   r„  ‚  r   r„  r¸  c                   @   r‚   )zDTestSignatureObject.test_signature_on_callable_objects.<locals>.SpamNrƒ   r   r   r   r   r¡  Š  r¸   r¡  r`  c                   @   r‚   )zCTestSignatureObject.test_signature_on_callable_objects.<locals>.BarNrƒ   r   r   r   r   ÚBar  r¸   râ  c                   @   r‚   )zGTestSignatureObject.test_signature_on_callable_objects.<locals>.WrappedNrƒ   r   r   r   r   ÚWrapped–  r¸   rã  c                 S   r/   r   r   rh  r   r   r   r†   ˜  r‡   zHTestSignatureObject.test_signature_on_callable_objects.<locals>.<lambda>úwrapper loop)r»   r  rÌ  rN  r:   r²  rE  )r@   r„  r¡  râ  rã  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   rŽ  r   r   rh  r   r   r   r†   ¢  r‡   z?TestSignatureObject.test_signature_on_lambdas.<locals>.<lambda>)))r   r„  .r1  .r9  r-  rZ   r   r   r   Útest_signature_on_lambdas¡  s   ÿz-TestSignatureObject.test_signature_on_lambdasc                 C   sX  dt dtfdd„}|  t |¡dk¡ |  t |¡dk¡ |  t |¡tk¡ |  t |¡tk¡ dt dtfdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  tt |¡ƒtt |¡ƒ¡ dt dt fdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  	tt |¡ƒtt |¡ƒ¡ dt fd	d„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  	tt |¡ƒtt |¡ƒ¡ dd
œdt dtfdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  	tt |¡ƒtt |¡ƒ¡ dtfdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  	tt |¡ƒtt |¡ƒ¡ dt dtfdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  	tt |¡ƒtt |¡ƒ¡ dt dtf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œdt fdd„}ddœdt fdd„}|  t |¡t |¡k¡ |  t |¡t |¡k¡ |  tt |¡ƒtt |¡ƒ¡ d S )Nr“   rg  c                S   r/   r   r   r’   r   r   r   r"   §  r‡   z8TestSignatureObject.test_signature_equality.<locals>.foor˜   c                S   r/   r   r   r’   r   r   r   r   ­  r‡   z8TestSignatureObject.test_signature_equality.<locals>.barc                S   r/   r   r   r’   r   r   r   r   ³  r‡   c                S   r/   r   r   r’   r   r   r   r   ¹  r‡   r  c                S   r/   r   r   r’   r   r   r   r   ¿  r‡   c                S   r/   r   r   ©r   r   r   r   r   r   Å  r‡   c                 S   r/   r   r   r’   r   r   r   r   Ë  r‡   c                 S   r/   r   r   ©r“   r   r   r   r   rY   Ð  r‡   z9TestSignatureObject.test_signature_equality.<locals>.spamc                 S   r/   r   r   rò  r   r   r   r"   Ö  r‡   c                 S   r/   r   r   ©r   r“   r   r   r   r   r   ×  r‡   r    rh  c                 S   r/   r   r   rò  r   r   r   r"   Ý  r‡   c                 S   r/   r   r   ré  r   r   r   r   Þ  r‡   c                S   r/   r   r   ©Úposr   r“   r   r   r   r   r"   ä  r‡   c                S   r/   r   r   ©rë  r   r“   r   r   r   r   r   å  r‡   c                S   r/   r   r   rê  r   r   r   r"   ë  r‡   c                S   r/   r   r   rì  r   r   r   r   ì  r‡   rÈ   c                _   r/   r   r   )rë  r   r“   r   r   rÈ   r   r   r   r"   ò  r‡   c                _   r/   r   r   )rë  r   r“   r   r   rÈ   r   r   r   r   ó  r‡   )
r­   r4  r?   r:   r  r6   r   r»   Úhashr°  )r@   r"   r   rY   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
„}|  t|ƒtt  |¡ƒ¡ i fdd„}|  	t
d¡ tt  |¡ƒ W d   ƒ n1 saw   Y  di fdd„}|  	t
d¡ tt  |¡ƒ W d   ƒ d S 1 s†w   Y  d S )Nc                 S   r/   r   r   rh  r   r   r   r"   ý  r‡   z8TestSignatureObject.test_signature_hashable.<locals>.foor   r`  rY   ©r  rg  r    c                 S   r/   r   r   rh  r   r   r   r     r‡   z8TestSignatureObject.test_signature_hashable.<locals>.barc                 S   r/   r   r   rh  r   r   r   r"   	  r‡   úunhashable typec                 S   r/   r   r   rh  r   r   r   r"     r‡   )rg  r    )r:   rd  rb  r  ÚPOSITIONAL_OR_KEYWORDr»   rí  r°  r  rÌ  rN  )r@   r  r  r"   Úfoo_sigZ
manual_sigr   r   r   r   Útest_signature_hashableù  s&   

ÿ
ÿ"ÿz+TestSignatureObject.test_signature_hashablec                 C   sö   dd dœdt ddfdd„}|  tt |¡ƒd¡ dd dœdt ddfd	d„}|  tt |¡ƒd
¡ dd„ }|  tt |¡ƒd¡ dtt dtttf fdd„}|  tt |¡ƒd¡ ddlm	} dtt d|ttf fdd„}|  tt |¡ƒd¡ d S )Nr    r  r   rg  r˜   c                [   r/   r   r   ©r   r“   r   rÈ   r   r   r   r"     r   z3TestSignatureObject.test_signature_str.<locals>.fooz*(a: int = 1, *, b, c=None, **kwargs) -> 42c                _   r/   r   r   )r   r“   r   r   rÈ   r   r   r   r"     r   z.(a: int = 1, *args, b, c=None, **kwargs) -> 42c                   S   r/   r   r   r   r   r   r   r"     r   r  c                 S   r/   r   r   rh  r   r   r   r"      r   z#(a: list[str]) -> tuple[str, float]r   )ÚTuplec                 S   r/   r   r   rh  r   r   r   r"   &  r   z#(a: list[str]) -> Tuple[str, float]r  )
r­   r»   r/  r:   r  rŽ   r  r4  r×  rõ  )r@   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_  /  r6  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))r:   rb  rd  r  rŽ   r(   r  r  rc  re  r»   r/  r}  ÚVAR_POSITIONAL)r@   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„}t  |¡}|jd d}|  |jd ¡ |j|jd}|  |j|j¡ |jdd}|  |jd¡ |  |t  |¡¡ d S )Nrg  r˜   c                   S   r/   r   r   r   r   r   r   r_  H  r   z=TestSignatureObject.test_signature_replace_anno.<locals>.testrï  )rg  r˜   )r:   r  r  rÔ   r  r  r»   r*  r   r   r   Útest_signature_replace_annoG  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„Zd	S )zFTestSignatureObject.test_signature_on_mangled_parameters.<locals>.Spamr!   rÐ   )Ú	_Spam__p2Ú	_Spam__p1r    rû  c                S   r/   r   r   )r@   rü  rû  r   r   r   r"   V  r   zJTestSignatureObject.test_signature_on_mangled_parameters.<locals>.Spam.fooN)r!   )rü  r    rû  r!   r¤   r   r   r   r   r¡  U  rÖ  r¡  c                   @   r‚   )zETestSignatureObject.test_signature_on_mangled_parameters.<locals>.HamNrƒ   r   r   r   r   ÚHamX  r¸   rý  ))r­  )rü  r!   r    r1  )rû  rÐ   r!   r3  .)r»   r  r"   )r@   r¡  rý  r   r   r   Ú$test_signature_on_mangled_parametersT  s   ÿ
ÿz8TestSignatureObject.test_signature_on_mangled_parametersc                 C   s6   G dd„ dt jƒ}ddd„}| |¡}|  ||¡ d S )Nc                   @   r‚   )zPTestSignatureObject.test_signature_from_callable_python_obj.<locals>.MySignatureNrƒ   r   r   r   r   r  e  r…   r  r“   r    c                S   r/   r   r   r’   r   r   r   r"   f  r‡   zHTestSignatureObject.test_signature_from_callable_python_obj.<locals>.foo©r“   r    ©r:   rd  rs  ÚassertIsInstance©r@   r  r"   rò  r   r   r   Ú'test_signature_from_callable_python_objd  s   

z;TestSignatureObject.test_signature_from_callable_python_objc                 C   s:   G dd„ dt jƒ}G dd„ dƒ}| |¡}|  ||¡ d S )Nc                   @   r‚   )zKTestSignatureObject.test_signature_from_callable_class.<locals>.MySignatureNrƒ   r   r   r   r   r  l  r…   r  c                   @   r‚   )zCTestSignatureObject.test_signature_from_callable_class.<locals>.fooNrƒ   r   r   r   r   r"   m  r…   r"   r   r  r   r   r   Ú"test_signature_from_callable_classj  s   
z6TestSignatureObject.test_signature_from_callable_classc                 C   s.   G dd„ dt jƒ}| tj¡}|  ||¡ d S )Nc                   @   r‚   )zQTestSignatureObject.test_signature_from_callable_builtin_obj.<locals>.MySignatureNrƒ   r   r   r   r   r  t  r…   r  )r:   rd  rs  ro  rp  r  )r@   r  r  r   r   r   Ú(test_signature_from_callable_builtin_objq  s   z<TestSignatureObject.test_signature_from_callable_builtin_objc                 C   r}  r   )
r.   r:   r  rŽ   r(   r~  r6   r»   r2   r  r€  r   r   r   Ú3test_signature_definition_order_preserved_on_kwonlyx  rƒ  zGTestSignatureObject.test_signature_definition_order_preserved_on_kwonlyc                 C   s0   t  dd„ ¡j}t  dd„ ¡j}|  ||¡ d S )Nc                 S   r/   r   r   rP  r   r   r   r†   „  r‡   zITestSignatureObject.test_signater_parameters_is_ordered.<locals>.<lambda>c                 S   r/   r   r   )rá   r   r   r   r   r†   …  r‡   )r:   r  r(   r°  )r@   Zp1Úp2r   r   r   Ú#test_signater_parameters_is_orderedƒ  s   z7TestSignatureObject.test_signater_parameters_is_orderedc              	   C   s  G dd„ dƒ}d|dt fdd„}d|dddt fd	d
„}tjtjjfD ]j}| j|dZ ||ƒ}|  |jt ¡ |  |jd j	|¡ ||t
ƒ d}|  |jt ¡ |  |jd j	|¡ ||dt it
ƒ d}|  |jt ¡ |  |jd j	|¡ |  |jd j	d¡ W d   ƒ n1 s‡w   Y  q"d S )Nc                   @   r‚   )zQTestSignatureObject.test_signature_annotations_with_local_namespaces.<locals>.FooNrƒ   r   r   r   r   r„  ‰  r…   r„  r"   rg  c                 S   r/   r   r   r  r   r   r   rÏ  Š  r‡   zRTestSignatureObject.test_signature_annotations_with_local_namespaces.<locals>.funcr   râ  c                 S   r/   r   r   ©r"   r   r   r   r   Úfunc2‹  r‡   zSTestSignatureObject.test_signature_annotations_with_local_namespaces.<locals>.func2©Úsignature_func)ré   )rî  ré   )r­   r:   r  rd  rs  r#  r»   r  r(   r	  ré   )r@   r„  rÏ  r
  r  Zsig1Zsig2Zsig3r   r   r   Ú0test_signature_annotations_with_local_namespacesˆ  s$   ô€ÿzDTestSignatureObject.test_signature_annotations_with_local_namespacesc                 C   s&  t }tj}tj}tjj}tjtjjfD ]|}| j|dj |  ||j	ƒ||d|ƒ|d|ƒfd¡ |  ||j
ƒ|d|d|dd|d|ddfd	¡ |  ||jƒ|d|d|dd|d|d
d|d|ddfd	¡ |  ||jƒ||d|dd|d|d
d|d|ddfd¡ |  ||jƒ|ƒ ¡ |  ||jƒ||d|ƒ|d|ƒ|d|ƒfd¡ |  ||j	dd||d|ƒ|d|ƒfd¡ |  ||j
dd||j	|d|td|d|tdfd	¡ |  ||jdd||j	|d|td|d|dd|d||j	dfd	¡ |  ||jdd||d|dd|d|dd|d|ddfd¡ ttdœ}ttdœ}|  t¡ ||j
d|d W d   ƒ n	1 sBw   Y  |  ||j
d|d|t|d|td|d|tdfd	¡ |  ||j
d||d|t|d|td|d|tdfd	¡ W d   ƒ n	1 s‹w   Y  qd S )Nr  r   r“   r`  rñ  r­   ©r	  r/  )r  r(   r  r   r  r	  Tró  )r­   r/  )r/  rñ  rí  rë  )rì  rî  ré   )r   r:   rd  rb  rñ  r  rs  r#  r»   rñ  rÙ   rÿ  r   r  r  r­   r/  r4  Úcomplexr  r™   rM  Ú	NameError)r@   r  r  ZparZPORKr  ZglobalnsZlocalnsr   r   r   Útest_signature_eval_strœ  sâ   þÿþþþþýþþ	ýÿþ	ýÿÿþÿþþþþýþþ	ýÿþ
	
ÿþþþ	þþþ¦€ÿz+TestSignatureObject.test_signature_eval_strc              	   C   sŽ   G dd„ dƒ}dd„ }||ƒ}d |_ tjtjjfD ]"}| j|d |  ||ƒt ¡ ¡ W d   ƒ n1 s6w   Y  q|  t |¡i ¡ d S )Nc                   @   r—  )zDTestSignatureObject.test_signature_none_annotation.<locals>.funclikec                 S   re  r   rf  ri  r   r   r   rÄ     rj  zMTestSignatureObject.test_signature_none_annotation.<locals>.funclike.__init__c                 _   rk  r   rO  rÇ   r   r   r   rU    r  zMTestSignatureObject.test_signature_none_annotation.<locals>.funclike.__call__Nrl  r   r   r   r   rm    rn  rm  c                   S   r/   r   r   r   r   r   r   r"     r‡   z?TestSignatureObject.test_signature_none_annotation.<locals>.foor  )ri  r:   r  rd  rs  r#  r»   rþ  )r@   rm  r"   r  r   r   r   Útest_signature_none_annotation  s   ÿ€z2TestSignatureObject.test_signature_none_annotationN)4r7   rF   rG   r‹  r  r  r)  r+  r/  r2  r5  r:  rE  r   ru   rt  r   rT  r^  r_  ra  rt  ru  rz  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  è  s‚    
0#ÿFÿ

5 Y%HQÿ
ÿ
 Sÿ
ir  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 )Nrc  )r:   rb  r6   rc  rñ  rø  ÚKEYWORD_ONLYr}  r»   r/  rë  )r@   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 sBw   Y  |  
td¡ t jdt jjd W d   ƒ n1 saw   Y  |  
td	¡ t jd t jjd W d   ƒ n1 s€w   Y  |  
td
¡ t jdt jjd W d   ƒ n1 sŸw   Y  |  
td
¡ t jdt jjd W d   ƒ n1 s¾w   Y  |  
td¡ t jddt jjd W d   ƒ n1 sÞw   Y  |  
td¡ t jddt jjd W d   ƒ n1 sþw   Y  t jddt jjd}|  
td¡ |jt jjd W d   ƒ n	1 s'w   Y  |  t|ƒ d¡¡ |  dt|ƒv ¡ d S )Nr"   r„  ©rz  ry  z)value '123' is not a valid Parameter.kindZ123znot a valid parameter namerŠ  r|  úname must be a strzis not a valid parameter nameú$z.azcannot have default valuesr   r˜   z
<Parameterz"a=42")r:   rb  rc  r»   re  rz  rÔ   r	  r  ry  rÌ  rE  r}  rN  rø  rñ  r  r6   rë  rP  ©r@   r*   r   r   r   Útest_signature_parameter_object(  sX   ÿþÿÿÿþÿþÿÿÿÿÿÿ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˜   rx  )r:   rb  rc  r»   rí  r°  r  rø  )r@   r  r"   r   r   r   Ú!test_signature_parameter_hashableR  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˜   r  )r:   rb  r  r6   r?   r   )r@   r  r*   r   r   r   Ú!test_signature_parameter_equality[  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_w   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 s¶w   Y  |j|jd}|  ||¡ d S )Nr"   r˜   r  r    r  r   r  zname is a required attribute)re  rz  z<value <class 'inspect._empty'> is not a valid Parameter.kindr|  )r:   rb  r  r  r  r»   r	  r  re  r°  rÌ  rE  rÔ   rz  rñ  ry  )r@   r*   r  r   r   r   Ú test_signature_parameter_replacek  s@   ÿÿþÿýz4TestParameterObject.test_signature_parameter_replacec                 C   sD   |   td¡ tjd tjjd W d   ƒ d S 1 sw   Y  d S )Nr  r|  )rÌ  rN  r:   rb  rc  rZ   r   r   r   Ú(test_signature_parameter_positional_only“  s   "ÿz<TestParameterObject.test_signature_parameter_positional_onlyc                 C   st   |   td¡ tjdtjjd W d   ƒ n1 sw   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Ì  rE  r:   rb  rc  rñ  r»   ry  re  )r@   r
  r   r   r   Ú!test_signature_parameter_implicit—  s   ÿüÿz5TestParameterObject.test_signature_parameter_implicitc                 C   sx   t jdt jjd}|  t¡ d|_W d   ƒ n1 sw   Y  |  t¡ d|_W d   ƒ d S 1 s5w   Y  d S )NrY   r|  r   r{  )r:   rb  r  rM  rX  r"   ry  r  r   r   r   Ú%test_signature_parameter_immutability¤  s   ÿ"ÿz9TestParameterObject.test_signature_parameter_immutabilityN)r7   rF   rG   r  r  r  r  r  r  r   r  r   r   r   r   r   r    s    *	(
r  c                   @   sŒ   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Z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   )r:   r  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 s$w   Y  |  td¡ | j|ddd W d   ƒ n1 sBw   Y  |  td¡ | j|dd W d   ƒ d S 1 s`w   Y  d S )	Nc                   S   r«  rÍ  r   r   r   r   r   r_  ¶  r   z9TestSignatureBind.test_signature_bind_empty.<locals>.testr˜   útoo many positional argumentsr    r„  rÎ  ú)got an unexpected keyword argument 'spam'©r»   r"  rÌ  rN  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                  _   ó   | |fS r   r   r<  r   r   r   r_  Ä  r6  z7TestSignatureBind.test_signature_bind_var.<locals>.testr   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 s*w   Y  |  td	¡ |  |d¡ W d   ƒ n1 sFw   Y  |  td
¡ |  |¡ W d   ƒ n1 saw   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   r  r   r   rò  r   r   r   r_  Ñ  r™  z=TestSignatureBind.test_signature_bind_just_args.<locals>.testr    r!   rÐ   rN  r#  rD  z missing a required argument: 'b'z missing a required argument: 'a'r„  c                 S   r  r   r   rò  r   r   r   r_  á  r™  )r    r!   r„  c                 S   r  r   r   rò  r   r   r   r_  æ  r™  r“  rç  )r„  r!   r“  rh  )r„  r!   rÐ   r  )r    r„  rÐ   r9  r%  r.  r   r   r   Útest_signature_bind_just_argsÐ  s,   ÿÿþÿþ

z/TestSignatureBind.test_signature_bind_just_argsc                 C   s6   dd„ }|   |  |¡d¡ |   |  |ddd¡d¡ d S )Nc                  W   rŽ  r   r   r   r   r   r   r_  í  r   zATestSignatureBind.test_signature_bind_varargs_order.<locals>.testr   r    r!   rÐ   rN  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   ƒ d S 1 sRw   Y  d S )NrÐ   c                 W   r‘  r   r   )r   r“   r   r   r   r   r   r_  ô  rA  zDTestSignatureBind.test_signature_bind_args_and_varargs.<locals>.testr    r!   rD  rª   )r    r!   rÐ   )rD  rª   )r    r!   rÐ   r   rè  )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                  [   rŽ  r   r   )rÈ   r   r   r   r_    r   z?TestSignatureBind.test_signature_bind_just_kwargs.<locals>.testr   rQ  ©r"   rY   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                 [   r‘  r   r   rô  r   r   r   r_  	  rA  zCTestSignatureBind.test_signature_bind_args_and_kwargs.<locals>.testr    r!   r   rQ  r.  )r“   r   r"   rY   )r   r“   r"   rY   )r“   r"   rY   rD  )r“   r   r"   rY   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 sw   Y  |  | j|ddd¡ ddœdd„}|   td¡ |  |d¡ W d   ƒ n1 sIw   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„w   Y  |   td¡ |  |dd	¡ W d   ƒ n1 s¡w   Y  |   td¡ | j|dd	d	d
 W d   ƒ n1 sÀw   Y  |   td¡ | j|dd	dd W d   ƒ n1 sßw   Y  |   td¡ |  |d¡ W d   ƒ n1 sûw   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`w   Y  |  | j|dd	ddddd	dddœf¡ d S )Nc                 S   rŽ  r   r   r  r   r   r   r_    r   z:TestSignatureBind.test_signature_bind_kwonly.<locals>.testr#  r    r  c                S   s   |S r   r   )r   r"   r   r   r   r   r_  $  r   z"missing a required argument: 'bar'c                S   r'  r   r   r	  r   r   r   r_  *  r6  r!   rÌ  rÑ  )r   r"   r$  r„  )r   r"   rY   rQ  )r   rY   c                [   r  r   r   )r"   r   Úbinr   r   r   r_  E  r™  r	  rY   )rY   r"   r   z"missing a required argument: 'foo')rY   r   )r   r1  rY   )r1  rY   )rÌ  rN  r"  r»   r.  r   r   r   Útest_signature_bind_kwonly  st   ÿþÿþÿýÿþÿþÿýÿþÿÿÿþÿ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                _   r/   r   r   )r   r“   r   r   rÈ   r   r   r   r_  T  r   z=TestSignatureBind.test_signature_bind_arguments.<locals>.testr„  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  Ú	argumentsÚitemsrÈ   r   ©r@   r_  r  rš  r   r   r   Útest_signature_bind_argumentsS  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||< q|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‹w   Y  |  td¡ | j|d
ddd W d   ƒ n1 sªw   Y  |  td¡ | j|d
dd W d   ƒ d S 1 sÉw   Y  d S )NrÐ   r˜   r:  rÌ  c                [   s   | |||||fS r   r   )r÷  Úb_poÚc_por"   r   rÈ   r   r   r   r_  d  r  zCTestSignatureBind.test_signature_bind_positional_only.<locals>.test)r÷  r:  r;  r|  r`  r    r!   rD  rª   é   r	  zbut was passed as a keywordr„  )r"   r   r;  zparameter is positional only)r;  )r÷  r:  )rÐ   r˜   )r:   rb  r  r&  r'  r  r(   r7  r  rc  r  re  r»   r"  rÌ  rN  )r@   r  r_  r  r®  re  Znew_sigr   r   r   Ú#test_signature_bind_positional_onlya  s4   
ÿÿÿÿÿ"ÿ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   r/   r   r   )r   r@   r“   r   r   r   r_  ‚  r   zATestSignatureBind.test_signature_bind_with_self_arg.<locals>.testr    r!   rÐ   rN  rº  )r:   r  r˜  r»   r   r8  r   r   r   Ú!test_signature_bind_with_self_arg€  s   
z3TestSignatureBind.test_signature_bind_with_self_argc                 C   s¢   dd„ }t  |¡}|  td¡ |jddd W d   ƒ n1 s!w   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   r'  r   r   ©r   r   r   r   r   r_  ‹  r6  z?TestSignatureBind.test_signature_bind_vararg_name.<locals>.testz)got an unexpected keyword argument 'args'r   r    r?  c                  _   r'  r   r   r<  r   r   r   r_  ”  r6  r   r   r   rÈ   )r:   r  rÌ  rN  r˜  r»   r"  r6  r8  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>   r  zWTestSignatureBind.test_signature_bind_implicit_arg.<locals>.make_set.<locals>.<setcomp>rª   rS   r   r   r   r   Úmake_setŸ  r1  zDTestSignatureBind.test_signature_bind_implicit_arg.<locals>.make_setr    rª   >   r   r    rD  rÂ   rÊ   )rd  Ú	co_constsrf   ÚFunctionTypeÚiterr#   r»   r"  )r@   rB  Zsetcomp_codeZsetcomp_funcÚiteratorr   r   r   Ú test_signature_bind_implicit_argœ  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   )rÈ  )r   rÈ   r   r   r   r"   ¨  r   zATestSignatureBind.test_signature_bind_posonly_kwargs.<locals>.fooúpos-onlyÚkeywordrÌ  r   )r   rH  )r:   r  r˜  r»   rÈ   r›   r6  r7  )r@   r"   r  Úresultr   r   r   Ú"test_signature_bind_posonly_kwargs§  s
   
z4TestSignatureBind.test_signature_bind_posonly_kwargsN)r7   rF   rG   r‹  r"  r&  r)  r*  r+  r-  r/  r0  r2  r9  r=  r>  r@  r   rG  rK  r   r   r   r   r!  ®  s$    
7


r!  c                   @   r¾   )ÚTestBoundArgumentsc                 C   sR   dd„ }t  |¡ d¡}|  td¡ t|ƒ W d   ƒ d S 1 s"w   Y  d S )Nc                 S   r/   r   r   rh  r   r   r   r"   ´  r‡   zITestBoundArguments.test_signature_bound_arguments_unhashable.<locals>.foor    rð  )r:   r  r˜  rÌ  rN  rí  ©r@   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   r/   r   r   rh  r   r   r   r"   »  r‡   zGTestBoundArguments.test_signature_bound_arguments_equality.<locals>.foor    r!   r   c                 S   r/   r   r   r  r   r   r   r   Í  r‡   zGTestBoundArguments.test_signature_bound_arguments_equality.<locals>.barc                 S   r/   r   r   r’   r   r   r   r"   Ò  r‡   r’   rè  )r:   r  r˜  r6   r?   r   r6  )	r@   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ddifdd„}t  |¡}|jd	d
i d}ttjd ƒD ]'}| j|d t t ||¡¡}|  	||¡ W d   ƒ n1 sDw   Y  q"d S )Nr  r   r    rg  r˜   rQ  c                [   r/   r   r   r  r   r   r   r"   Ú  r‡   zETestBoundArguments.test_signature_bound_arguments_pickle.<locals>.foor  r’  r3  )r  )
r:   r  r˜  r#   r!  r"  r#  r$  r%  r»   )r@   r"   r  rš  r(  Z
ba_pickledr   r   r   Ú%test_signature_bound_arguments_pickleÙ  s   
þ€ÿz8TestBoundArguments.test_signature_bound_arguments_picklec                 C   sJ   i dœdddddifdd„}t  |¡}|jd	d
i d}|  t|ƒd¡ d S )Nr  r   r    rg  r˜   rQ  c                [   r/   r   r   r  r   r   r   r"   ä  r‡   zCTestBoundArguments.test_signature_bound_arguments_repr.<locals>.foor  r’  r3  z <BoundArguments \(a=20,.*\}\}\)>)r:   r  r˜  ZassertRegexrë  ©r@   r"   r  rš  r   r   r   Ú#test_signature_bound_arguments_reprã  s   
z6TestBoundArguments.test_signature_bound_arguments_reprc              
   C   sP  di 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  r   c                _   r/   r   r   )r   r“   r   r   r  r   r   r   r"   ê  r‡   zMTestBoundArguments.test_signature_bound_arguments_apply_defaults.<locals>.foor  )r   r  rÿ  )r   r   r  r„  r’  )rì   r5  )r“   r  )r   )r’  rì   c                 S   r/   r   r   r’   r   r   r   r"   ý  r‡   c                   S   r/   r   r   r   r   r   r   r"     r‡   rY   c                 S   r/   r   r   rh  r   r   r   r"     r‡   )r   rY   r  )r   r    rÎ  )	r:   r  r˜  Zapply_defaultsr»   rŽ   r6  r7  Zbind_partialrQ  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   r/   r   r   rh  r   r   r   r"     r‡   zMTestBoundArguments.test_signature_bound_arguments_arguments_type.<locals>.foor    )r:   r  r˜  rÔ   rg   r6  r™   rM  r   r   r   Ú-test_signature_bound_arguments_arguments_type  s   z@TestBoundArguments.test_signature_bound_arguments_arguments_typeN)	r7   rF   rG   rN  rO  rP  rR  rS  rT  r   r   r   r   rL  ²  s    
*rL  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)r@   z($self, obj)z($cls, /, obj)r°   )r:   Z_signature_get_bound_paramr»   )r@   Úgetterr   r   r   Útest_signature_get_bound_param  s   z:TestSignaturePrivateHelpers.test_signature_get_bound_paramc                 C   s8   t  |¡\}}}|  ||¡ |  ||¡ |  ||¡ d S r   )r:   Z"_signature_strip_non_python_syntaxr»   )r@   Ú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þ   )rY  rZ   r   r   r   Ú&test_signature_strip_non_python_syntax*  sT   úüüüüüüzBTestSignaturePrivateHelpers.test_signature_strip_non_python_syntaxN)r7   rF   rG   rW  rY  rZ  r   r   r   r   rU    s    
rU  c                   @   s4   e Zd Zee ed¡dd„ ƒƒZdd„ Zdd„ Z	dS )	ÚTestSignatureDefinitionsrl  c              	   C   s(  t ƒ }h d£}||O }dh}||O }dh}||O }h d£}||O }ddh}||O }t ƒ }ttƒ}t| ¡ ƒD ]:\}	}
t|
ƒs?q6t|
tƒrM|	|vrM| |	¡ |	|v rRq6| j	|	d |  
t |
¡¡ W d   ƒ n1 skw   Y  q6|D ]}	| j	|	d |  |
j¡ W d   ƒ n1 sŒw   Y  qsd S )N>   rE  rà  r#   ÚsliceÚvarsrœ  rž  ÚanextÚround>   ÚmaxÚ__build_class__r+  rR  Ú
breakpointrö   Ú
__import__)ry  )r9   r]  r-  r~  r7  ÚcallablerŸ  rg   rD  r#  ÚassertIsNotNoner:   r  r*  Ú__text_signature__)r@   Zno_signatureZneeds_groupsZ
needs_nullZneeds_semantic_updateZneeds_varargsZnot_converted_yetZtypes_with_signaturesrn  re  rC   r   r   r   Útest_builtins_have_signatures[  s<   
ÿ€ÿ€ÿz6TestSignatureDefinitions.test_builtins_have_signaturesc                 C   sF  dd„ }d|_ t |¡}|  |¡ |  t|ƒd¡ d|_ t |¡}|  t|ƒd¡ d|_ t |¡}|  t|ƒd¡ d	|_ t |¡}|  t|ƒd
¡ d|_ |  t¡ t |¡ W d   ƒ n1 saw   Y  d|_ |  t¡ t |¡ W d   ƒ n1 s~w   Y  d|_ |  t¡ t |¡ W d   ƒ d S 1 sœw   Y  d S )Nc                  _   r/   r   r   r<  r   r   r   rÏ  “  r   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)z"(self, a=1+2, b=4-3, c=1 | 3 | 16)z(self, a=3, b=1, c=19)z(self, a=1,
b=2,


   c=3)z(self, a=1, b=2, c=3)z(self, x=does_not_exist)z(self, x=sys, y=inspect)z(self, 123))rf  r:   r  re  r»   r/  rM  rE  )r@   rÏ  r  r   r   r   Ú'test_python_function_override_signature’  s4   




ÿÿ"ÿ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                   @   r‘   )zVTestSignatureDefinitions.test_base_class_have_text_signature.<locals>.MyBufferedReaderzbuffer reader class.N)r7   rF   rG   r  r   r   r   r   ÚMyBufferedReader³  r—   rj  z&(raw, buffer_size=DEFAULT_BUFFER_SIZE)z(raw, buffer_size=8192))Ztest.ann_module7ri  rf  r»   r:   r  r/  )r@   ri  rj  Ztext_signaturer  r   r   r   Ú#test_base_class_have_text_signature°  s   
z<TestSignatureDefinitions.test_base_class_have_text_signatureN)
r7   rF   rG   r   ru   rt  r   rg  rh  rk  r   r   r   r   r[  W  s    ÿ4r[  c                   @   s    e Zd Zdd„ Zedd„ ƒZdS )ÚNTimesUnwrappablec                 C   s   || _ d | _d S r   )rJ  Ú_next)r@   rJ  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    )rJ  rc   rm  rl  rZ   r   r   r   r²  Á  s
   

zNTimesUnwrappable.__wrapped__N)r7   rF   rG   rÄ   rY  r²  r   r   r   r   rl  ¼  s    rl  c                   @   r¾   )Ú
TestUnwrapc                 C   s.   dd„ }t jdd|ƒ}|  t |¡|¡ d S )Nc                 S   ó   | | S r   r   r’   r   r   r   rÏ  Ì  r6  z(TestUnwrap.test_unwrap_one.<locals>.funcr  )rM  )rs   Ú	lru_cacherÔ   r:   Úunwrap)r@   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   ro  r   r   r’   r   r   r   rÏ  Ò  r6  z,TestUnwrap.test_unwrap_several.<locals>.funcr„  c                   S   r/   r   r   r   r   r   r   r÷  Ö  r3   z/TestUnwrap.test_unwrap_several.<locals>.wrapper)r#   rs   rV  r  r²  rÔ   r:   rq  )r@   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   ro  r   r   r’   r   r   r   Úfunc1Ý  r6  z#TestUnwrap.test_stop.<locals>.func1c                   S   r/   r   r   r   r   r   r   r
  ß  r3   z#TestUnwrap.test_stop.<locals>.func2c                   S   r/   r   r   r   r   r   r   r÷  â  r3   z%TestUnwrap.test_stop.<locals>.wrapperr    c                 S   s
   t | dƒS )NÚ	stop_hererp  rS  r   r   r   r†   ç  rH  z&TestUnwrap.test_stop.<locals>.<lambda>)Ústop)rs   rV  rv  r:   rq  rÔ   )r@   ru  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w   Y  dd„ }||_ ||_ |  td¡ t |¡ W d   ƒ n1 sBw   Y  |  td¡ t |¡ W d   ƒ d S 1 s^w   Y  d S )Nc                   S   r/   r   r   r   r   r   r   ru  ë  r‡   z$TestUnwrap.test_cycle.<locals>.func1rä  c                   S   r/   r   r   r   r   r   r   r
  ð  r‡   z$TestUnwrap.test_cycle.<locals>.func2)r²  rÌ  rE  r:   rq  )r@   ru  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   r/   r   r   r   r   r   r   rÏ  ù  r‡   z(TestUnwrap.test_unhashable.<locals>.funcc                       s   e Zd ZdZ” ZdS )z%TestUnwrap.test_unhashable.<locals>.CN)r7   rF   rG   Ú__hash__r²  r   rO  r   r   r–   û  s    r–   )r²  r*  r:   rq  )r@   r–   r   rO  r   Útest_unhashableø  s   zTestUnwrap.test_unhashablec                 C   sL   t t ¡ d ƒ}|  td¡ t |¡ W d   ƒ d S 1 sw   Y  d S )Nr    rä  )rl  r0  ÚgetrecursionlimitrÌ  rE  r:   rq  )r@   rC   r   r   r   Útest_recursion_limit   s   "ÿzTestUnwrap.test_recursion_limitN)	r7   rF   rG   rr  rt  rx  ry  r{  r}  r   r   r   r   rn  É  s    rn  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 )Nru   ú-mr:   r   ó    )Ú	importlibÚimport_moduler
   Údecoderi  r»   r:   r  )r@   ÚmoduleÚrcr1   Úerrr  r   r   r   Útest_only_source  s   

ÿzTestMain.test_only_sourcec                 C   sH   dd„ }d|_ |  t¡ t |¡ W d   ƒ d S 1 sw   Y  d S )Nc                   S   r/   r   r   r   r   r   r   r"     r   z)TestMain.test_custom_getattr.<locals>.foor˜   )re  rM  rN  r:   r  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  r:   z%concurrent.futures:ThreadPoolExecutorr   r€  )r
   rƒ  ri  r»   r:   r  r   )r@   r…  r1   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 )Nru   r  r:   r0  z#Can't get info for builtin modules.)r  r‚  r   rƒ  ri  r»   )r@   r„  ry  r1   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 )Nru   r  r:   z	--detailsr€  )r  r‚  r   Z!optim_args_from_interpreter_flagsr
   rƒ  r›   r7   rØ   Ú
__cached__r»   )r@   r„  r   r…  r1   r†  Úoutputr   r   r   Útest_details(  s   
ÿÿzTestMain.test_details)r7   rF   rG   r‡  rˆ  ru   rt  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   sX   t  |¡}t|dd}|  | ¡  d¡| d¡¡ W d   ƒ d S 1 s%w   Y  d S )Nró   rô   T)r:   r  rö   r»   rù   ri  )r@   r  rú   Zinspected_srcrÍ  r   r   r   ÚassertInspectEqualA  s   
þ"ÿzTestReload.assertInspectEqualc              	   C   s’   t d| jƒ9\}}t |¡}|  ||¡ t|ddd}| | j¡ W d   ƒ n1 s,w   Y  |  ||¡ W d   ƒ d S 1 sBw   Y  d S )NZ
reload_bugr	  ró   rô   )r   Ú
src_beforer  r‚  r  rö   r  Ú	src_after)r@   re  r  r„  rÍ  r   r   r   Útest_getsource_reloadI  s   
ÿ"ûz TestReload.test_getsource_reloadN)	r7   rF   rG   ÚtextwrapÚdedentr  r‘  r  r’  r   r   r   r   rŽ  5  s
    

rŽ  Ú__main__)kr-  r&  rn   rs   r  r:   rr  rE  r  Zos.pathr   ro  r!  r  r0  rf   r“  rÅ  ru   Zunittest.mockrk   Úconcurrent.futuresr   ÚImportErrorZtest.supportr   r   r   Ztest.support.import_helperr   Ztest.support.os_helperr	   Ztest.support.script_helperr
   r   r_  r   r`   r   r'  r   r   r   r   Ztest.test_importr   rØ   rÓ   r  r   r  rÅ   r.   r2   rÿ   r  rÃ   r4   rU   rW   r[   rý  r\   r]   r¿   rò   r  r  rw  r|  r  rŒ  r¥  r¯  r  r  r   r  r$  r)  r*  r  r  r,  r&  r^  rƒ  r‡  r  rÕ  rú  rd  r  rb  r  r  r  r!  rL  rU  r[  rl  rn  r~  rŽ  r7   Úmainr   r   r   r   Ú<module>   sè    ÿ

 F7 U
*l    78z I  c@          A   f?e<0
ÿ