
    iI                     |    S SK r S SKrS SKrS SKrS SKJr  S SKJr  \R                  " S5      r	S r
 " S S\5      rg)    N)SkipTest)TestCasekgbc                 F   ^  [         R                  " T 5      U 4S j5       nU$ )zRequire positional-only arguments for a function.

If not available, the test will be skippd.

Args:
    func (callable):
        The unit test function to decorate.
c                  X   > [         R                  S S S:  a  T" U 0 UD6$ [        S5      e)N   )      z1inspect.getargspec is not available on Python 3.8)sysversion_infor   argskwargsfuncs     ^/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/kgb/tests/py3/test_function_spy.py_wrap)require_func_pos_only_args.<locals>._wrap   s4    BQ6)(((NOO    )	functoolswraps)r   r   s   ` r   require_func_pos_only_argsr      s)     __TP P Lr   c                       \ rS rSrSrS rS rS r\S 5       r	\S 5       r
S rS	 rS
 rS rS r\S 5       rS rS rS r\S 5       rS rS rS r\S 5       rS rS rS r\S 5       rS rS rSrg)FunctionSpyTests    z.Python 3 unit tests for kgb.spies.FunctionSpy.c           
      l   S
SS.S[         S[        S[        S[        4S jjjnU R                  R	                  U5        UR
                  R                  nU R                  X!5        U R                  UR                  SS05        U R                  UR                  [         [        [        [        S.5        g	)z>Testing FunctionSpy with functions copies all attribute statesr	   cabr   returnc                    gNF r   r   r   s      r   r   LFunctionSpyTests.test_spy_with_function_copies_attribute_state.<locals>.func%   s    r   r   r   r   r    N   )strintboolagencyspy_onspyr   assertIsNotassertEqual__kwdefaults____annotations__)selfr   spy_funcs      r   -test_spy_with_function_copies_attribute_state>FunctionSpyTests.test_spy_with_function_copies_attribute_state#   s    	 	C 	C 	3 	t 	 	4 88==(##Q	
 	$$		r   c                     " S S5      nU" 5       nU R                   R                  UR                  5        UR                  R                  R                  nU R	                  X2R                  5        U R                  UR                  SS05        U R                  UR                  [        [        [        [        S.5        g)zKTesting FunctionSpy with bound methods copies all attribute states
        c            
       :    \ rS rSrSSS.S\S\S\S\4S jjjrS	rg
)NFunctionSpyTests.test_spy_with_bound_methods_copies_attribute_state.<locals>.A=   r	   r   r   r   r   r    c                    gr"   r#   r$   s      r   r   SFunctionSpyTests.test_spy_with_bound_methods_copies_attribute_state.<locals>.A.func>       r   r#   Nr'   	__name__
__module____qualname____firstlineno__r)   r*   r+   r   __static_attributes__r#   r   r   Ar9   =   /    Q   s 4  r   rD   r   r	   r&   Nr,   r-   r   r.   r/   r0   r1   r2   r)   r*   r+   )r3   rD   r   r4   s       r   2test_spy_with_bound_methods_copies_attribute_stateCFunctionSpyTests.test_spy_with_bound_methods_copies_attribute_state:   s    	 	 C166"66::??66*##Q	
 	$$		r   c                 v    " S S5      nU R                   R                  UR                  5        UR                  R                  R                  nU R	                  X!R                  5        U R                  UR                  SS05        U R                  UR                  [        [        [        [        S.5        g)zMTesting FunctionSpy with unbound methods copies all attribute states
        c            
       :    \ rS rSrSSS.S\S\S\S\4S jjjrS	rg
)PFunctionSpyTests.test_spy_with_unbound_methods_copies_attribute_state.<locals>.AW   r	   r   r   r   r   r    c                    gr"   r#   r$   s      r   r   UFunctionSpyTests.test_spy_with_unbound_methods_copies_attribute_state.<locals>.A.funcX   r=   r   r#   Nr'   r>   r#   r   r   rD   rK   W   rE   r   rD   r   r	   r&   NrF   )r3   rD   r4   s      r   4test_spy_with_unbound_methods_copies_attribute_stateEFunctionSpyTests.test_spy_with_unbound_methods_copies_attribute_stateT   s    	 	 	166"66::??66*##Q	
 	$$		r   c                    U R                  S5      nU R                  R                  U5        U" SS5      nU R                  US5        U R                  [	        UR
                  R                  5      S5        U R                  UR
                  R                  S   R                  S5        U R                  UR
                  R                  S   R                  0 5        g)	zMTesting FunctionSpy calls with function containing positional-only
arguments
zG
            def func(a, b=1, /):
                return a * b
        r      
   r(   r   )r   rR   N		make_funcr,   r-   r0   lenr.   callsr   r   r3   r   results      r   0test_call_with_function_and_positional_only_argsAFunctionSpyTests.test_call_with_function_and_positional_only_argsm   s    
 ~~  
 	4 a$TXX^^,a0*//8*1126r   c                    U R                  S5      nU R                  R                  U5        U" S5      nU R                  US5        U R                  [	        UR
                  R                  5      S5        U R                  UR
                  R                  S   R                  S5        U R                  UR
                  R                  S   R                  0 5        g)zoTesting FunctionSpy calls with function containing positional-only
arguments and no positional argument passed
zG
            def func(a, b=2, /):
                return a * b
        r      r(   r   )r   r   NrT   rX   s      r   >test_call_with_function_and_positional_only_args_no_pos_passedOFunctionSpyTests.test_call_with_function_and_positional_only_args_no_pos_passed   s    
 ~~  
 	4 a#TXX^^,a0*//8*1126r   c                    SS.S jnU R                   R                  U5        U" SSS9nU R                  US5        U R                  [        UR                  R
                  5      S5        U R                  UR                  R
                  S   R                  S5        U R                  UR                  R
                  S   R                  S	S05        g
)zJTesting FunctionSpy calls with function containing keyword-only
arguments
r   r   c                
    X-  $ Nr#   r   r   s     r   r   LFunctionSpyTests.test_call_with_function_and_keyword_only_args.<locals>.func   	    5Lr   rR   rS   r(   r   r   r   Nr,   r-   r0   rV   r.   rW   r   r   rX   s      r   -test_call_with_function_and_keyword_only_args>FunctionSpyTests.test_call_with_function_and_keyword_only_args   s      	 	4 a1$TXX^^,a0*//6*11C8<r   c                    SS.S jnU R                   R                  U5        U" S5      nU R                  US5        U R                  [        UR                  R
                  5      S5        U R                  UR                  R
                  S   R                  S5        U R                  UR                  R
                  S   R                  SS05        g	)
z`Testing FunctionSpy calls with function containing keyword-only
arguments and no keyword passed
r   ra   c                
    X-  $ rc   r#   rd   s     r   r   YFunctionSpyTests.test_call_with_function_and_keyword_only_args_no_kw_passed.<locals>.func   rf   r   r]   r(   r   rg   r   Nrh   rX   s      r   :test_call_with_function_and_keyword_only_args_no_kw_passedKFunctionSpyTests.test_call_with_function_and_keyword_only_args_no_kw_passed   s      	 	4 a#TXX^^,a0*//6*11C8<r   c                 "  ^ S m " U4S jS[         5      nU R                  R                  [        R                  5        U R                  R                  UR
                  US9  U R                  R                  [        R                  SUS5        g)zXTesting FunctionSpy construction with a decorator not preserving
an unbound method name
c                    ^  U 4S jnU$ )Nc                     > T" U 0 UD6$ rc   r#   r   s     r   _wrapperjFunctionSpyTests.test_init_with_unbound_method_decorator_bad_func_name.<locals>.bad_deco.<locals>._wrapper       T,V,,r   r#   r   rs   s   ` r   bad_decoXFunctionSpyTests.test_init_with_unbound_method_decorator_bad_func_name.<locals>.bad_deco       - Or   c                   (   > \ rS rSr Y S 5       rSrg)XFunctionSpyTests.test_init_with_unbound_method_decorator_bad_func_name.<locals>.MyObject   c                     g rc   r#   r3   s    r   	my_methodbFunctionSpyTests.test_init_with_unbound_method_decorator_bad_func_name.<locals>.MyObject.my_method       r   r#   Nr?   r@   rA   rB   r   rC   rw   s   r   MyObjectr{           r   r   )ownerz%r doesn't have a function named "%s". This appears to be a decorator that doesn't preserve function names. Try passing func_name= when setting up the spy.rs   N)objectr,   r-   loggerwarningr   assertSpyCalledWithr3   r   rw   s     @r   5test_init_with_unbound_method_decorator_bad_func_nameFFunctionSpyTests.test_init_with_unbound_method_decorator_bad_func_name   sv    		v 	
 	6>>*8--!) 	 	+ 	''NN2 	r   c                   ^ S m " U4S jS[         5      nU R                  R                  [        R                  5        U R                  R                  UR
                  USS9  U R                  R                  [        R                  5        g)zyTesting FunctionSpy construction with a decorator not preserving
an unbound method name and explicit func_name= provided
c                    ^  U 4S jnU$ )Nc                     > T" U 0 UD6$ rc   r#   r   s     r   rs   pFunctionSpyTests.test_init_with_unbound_method_decorator_corrected_func_name.<locals>.bad_deco.<locals>._wrapper   ru   r   r#   rv   s   ` r   rw   ^FunctionSpyTests.test_init_with_unbound_method_decorator_corrected_func_name.<locals>.bad_deco   ry   r   c                   (   > \ rS rSr Y S 5       rSrg)^FunctionSpyTests.test_init_with_unbound_method_decorator_corrected_func_name.<locals>.MyObject   c                     g rc   r#   r~   s    r   r   hFunctionSpyTests.test_init_with_unbound_method_decorator_corrected_func_name.<locals>.MyObject.my_method   r   r   r#   Nr   r   s   r   r   r      r   r   r   r   )r   	func_nameN)r   r,   r-   r   r   r   assertSpyNotCalledr   s     @r   ;test_init_with_unbound_method_decorator_corrected_func_nameLFunctionSpyTests.test_init_with_unbound_method_decorator_corrected_func_name   si    		v 	
 	6>>*8--!)%0 	 	2 	&&v~~6r   c                    SS jnU R                   R                  U5        [        R                  " U5      nU R	                  UR
                  SS/5        U R                  UR                  5        U R                  UR                  5        U R	                  UR                  S5        U R	                  UR                  / 5        U R                  UR                  5        U R	                  UR                  0 5        g)z=Testing FunctionSpy in inspect.getfullargspec() with functionc                 
    X-  $ rc   r#   rd   s     r   r   @FunctionSpyTests.test_getfullargspec_with_function.<locals>.func   rf   r   r   r   rg   Nr,   r-   inspectgetfullargspecr0   r   assertIsNonevarargsvarkwdefaults
kwonlyargskwonlydefaultsannotationsr3   r   argspecs      r   !test_getfullargspec_with_function2FunctionSpyTests.test_getfullargspec_with_function   s    	 	4 ((.Sz2'//*'--())40++R0'001,,b1r   c                    U R                  S5      nU R                  R                  U5        [        R                  " U5      nU R                  UR                  / SQ5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  / 5        U R                  UR                  5        U R                  UR                  0 5        g)z\Testing FunctionSpy in inspect.getfullargspec() with function and
positional-only arguments
zL
            def func(a, b=2, /, c=3):
                return a * b
        r$   r   r	   N)rU   r,   r-   r   r   r0   r   r   r   r   r   r   r   r   r   s      r   *test_getfullargspec_with_function_pos_only;FunctionSpyTests.test_getfullargspec_with_function_pos_only   s    
 ~~  
 	4 ((.7'//*'--())62++R0'001,,b1r   c                    SS.S jnU R                   R                  U5        [        R                  " U5      nU R	                  UR
                  / 5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R	                  UR                  SS/5        U R	                  UR                  SS05        U R	                  UR                  0 5        g)zYTesting FunctionSpy in inspect.getfullargspec() with function and
keyword-only arguments
r   ra   c                 
    X-  $ rc   r#   rd   s     r   r   MFunctionSpyTests.test_getfullargspec_with_function_keyword_only.<locals>.func  rf   r   r   r   Nr   r   s      r   .test_getfullargspec_with_function_keyword_only?FunctionSpyTests.test_getfullargspec_with_function_keyword_only
  s      	 	4 ((.r*'//*'--('**+++c3Z8//2
 	 	,,b1r   c                 >   SS[         S[         S[         4S jjnU R                  R                  U5        [        R                  " U5      nU R                  UR                  SS/5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  / 5        U R                  UR                  5        U R                  UR                  [         [         [         S.5        g)zNTesting FunctionSpy in inspect.getfullargspec() with function and
annotations
r   r   r    c                 
    X-  $ rc   r#   rd   s     r   r   LFunctionSpyTests.test_getfullargspec_with_function_annotations.<locals>.func#  rf   r   rg   r   r   r    N)r*   r,   r-   r   r   r0   r   r   r   r   r   r   r   r   r   s      r   -test_getfullargspec_with_function_annotations>FunctionSpyTests.test_getfullargspec_with_function_annotations  s    	C 	C 	 	 	4 ((.Sz2'//*'--())40++R0'001,,/
 	r   c                 6    " S S5      nU" 5       nU R                   R                  UR                  5        [        R                  " UR                  5      nU R                  UR                  / SQ5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  / 5        U R                  UR                  5        U R                  UR                  0 5        g)zATesting FunctionSpy in inspect.getfullargspec() with bound methodc                       \ rS rSrSS jrSrg)HFunctionSpyTests.test_getfullargspec_with_bound_method.<locals>.MyObjecti8  c                 
    X-  $ rc   r#   r3   r   r   s      r   r   MFunctionSpyTests.test_getfullargspec_with_bound_method.<locals>.MyObject.func9  	    ur   r#   Nrg   r?   r@   rA   rB   r   rC   r#   r   r   r   r   8      r   r   r   rg   Nr,   r-   r   r   r   r0   r   r   r   r   r   r   r   r   r3   r   objr   s       r   %test_getfullargspec_with_bound_method6FunctionSpyTests.test_getfullargspec_with_bound_method6  s    	 	 j388$((2'9:'//*'--())40++R0'001,,b1r   c                 B   U R                  SSS9nU" 5       nU R                  R                  UR                  5        [        R
                  " UR                  5      nU R                  UR                  / SQ5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  / 5        U R                  UR                  5        U R                  UR                  0 5        g)z`Testing FunctionSpy in inspect.getfullargspec() with bound method
and positional-only arguments
z
            class MyObject:
                def func(self, a, b=2, /, c=3):
                    return a * b
            r   r   r3   r   r   r   r   NrU   r,   r-   r   r   r   r0   r   r   r   r   r   r   r   r   r   s       r   .test_getfullargspec_with_bound_method_pos_only?FunctionSpyTests.test_getfullargspec_with_bound_method_pos_onlyI  s    
 >>
 ! " " j388$((2'>?'//*'--())62++R0'001,,b1r   c                 <    " S S5      nU" 5       nU R                   R                  UR                  5        [        R                  " UR                  5      nU R                  UR                  S/5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  SS/5        U R                  UR                  SS05        U R                  UR                  0 5        g)z]Testing FunctionSpy in inspect.getfullargspec() with bound method
and keyword-only arguments
c                   "    \ rS rSrSS.S jrSrg)UFunctionSpyTests.test_getfullargspec_with_bound_method_keyword_only.<locals>.MyObjectig  r   ra   c                
    X-  $ rc   r#   r   s      r   r   ZFunctionSpyTests.test_getfullargspec_with_bound_method_keyword_only.<locals>.MyObject.funch  r   r   r#   Nr   r#   r   r   r   r   g      #$  r   r   r3   r   r   r   Nr   r   s       r   2test_getfullargspec_with_bound_method_keyword_onlyCFunctionSpyTests.test_getfullargspec_with_bound_method_keyword_onlyc  s    	 	 j388$((2x0'//*'--('**+++c3Z8//2
 	 	,,b1r   c                 V    " S S5      nU" 5       nU R                   R                  UR                  5        [        R                  " UR                  5      nU R                  UR                  / SQ5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  / 5        U R                  UR                  5        U R                  UR                  [        [        [        S.5        g)zRTesting FunctionSpy in inspect.getfullargspec() with bound method
and annotations
c                   .    \ rS rSrSS\S\S\4S jjrSrg)	TFunctionSpyTests.test_getfullargspec_with_bound_method_annotations.<locals>.MyObjecti~  r   r   r    c                 
    X-  $ rc   r#   r   s      r   r   YFunctionSpyTests.test_getfullargspec_with_bound_method_annotations.<locals>.MyObject.func  r   r   r#   Nrg   r?   r@   rA   rB   r*   r   rC   r#   r   r   r   r   ~  !    c c #  r   r   r   rg   r   Nr,   r-   r   r   r   r0   r   r   r   r   r   r   r   r   r*   r   s       r   1test_getfullargspec_with_bound_method_annotationsBFunctionSpyTests.test_getfullargspec_with_bound_method_annotationsz  s    	 	 j388$((2'9:'//*'--())40++R0'001,,/
 	r   c                 (    " S S5      nU R                   R                  UR                  5        [        R                  " UR                  5      nU R                  UR                  / SQ5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  / 5        U R                  UR                  5        U R                  UR                  0 5        g)zLTesting FunctionSpy in inspect.getfullargspec() with unbound method
        c                       \ rS rSrSS jrSrg)JFunctionSpyTests.test_getfullargspec_with_unbound_method.<locals>.MyObjecti  c                 
    X-  $ rc   r#   r   s      r   r   OFunctionSpyTests.test_getfullargspec_with_unbound_method.<locals>.MyObject.func  r   r   r#   Nrg   r   r#   r   r   r   r     r   r   r   r   rg   Nr   r3   r   r   s      r   'test_getfullargspec_with_unbound_method8FunctionSpyTests.test_getfullargspec_with_unbound_method  s    	 	 	8==)((7'9:'//*'--())40++R0'001,,b1r   c                 4   U R                  SSS9nU R                  R                  UR                  5        [        R
                  " UR                  5      nU R                  UR                  / SQ5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  / 5        U R                  UR                  5        U R                  UR                  0 5        g)zbTesting FunctionSpy in inspect.getfullargspec() with unbound method
and positional-only arguments
r   r   r   r   r   Nr   r   s      r   0test_getfullargspec_with_unbound_method_pos_onlyAFunctionSpyTests.test_getfullargspec_with_unbound_method_pos_only  s    
 >>
 ! " " 	8==)((7'>?'//*'--())62++R0'001,,b1r   c                 .    " S S5      nU R                   R                  UR                  5        [        R                  " UR                  5      nU R                  UR                  S/5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  SS/5        U R                  UR                  SS05        U R                  UR                  0 5        g)z_Testing FunctionSpy in inspect.getfullargspec() with unbound method
and keyword-only arguments
c                   "    \ rS rSrSS.S jrSrg)WFunctionSpyTests.test_getfullargspec_with_unbound_method_keyword_only.<locals>.MyObjecti  r   ra   c                
    X-  $ rc   r#   r   s      r   r   \FunctionSpyTests.test_getfullargspec_with_unbound_method_keyword_only.<locals>.MyObject.func  r   r   r#   Nr   r#   r   r   r   r     r   r   r   r3   r   r   r   Nr   r   s      r   4test_getfullargspec_with_unbound_method_keyword_onlyEFunctionSpyTests.test_getfullargspec_with_unbound_method_keyword_only  s    	 	 	8==)((7x0'//*'--('**+++c3Z8//2
 	 	,,b1r   c                 H    " S S5      nU R                   R                  UR                  5        [        R                  " UR                  5      nU R                  UR                  / SQ5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  / 5        U R                  UR                  5        U R                  UR                  [        [        [        S.5        g)zTTesting FunctionSpy in inspect.getfullargspec() with unbound method
and annotations
c                   .    \ rS rSrSS\S\S\4S jjrSrg)	VFunctionSpyTests.test_getfullargspec_with_unbound_method_annotations.<locals>.MyObjecti  r   r   r    c                 
    X-  $ rc   r#   r   s      r   r   [FunctionSpyTests.test_getfullargspec_with_unbound_method_annotations.<locals>.MyObject.func  r   r   r#   Nrg   r   r#   r   r   r   r     r   r   r   r   rg   r   Nr   r   s      r   3test_getfullargspec_with_unbound_method_annotationsDFunctionSpyTests.test_getfullargspec_with_unbound_method_annotations  s    	 	 	8==)((7'9:'//*'--())40++R0'001,,/
 	r   c                 (    " S S5      nU R                   R                  UR                  5        [        R                  " UR                  5      nU R                  UR                  / SQ5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  / 5        U R                  UR                  5        U R                  UR                  0 5        g)zITesting FunctionSpy in inspect.getfullargspec() with classmethod
        c                   (    \ rS rSr\SS j5       rSrg)GFunctionSpyTests.test_getfullargspec_with_classmethod.<locals>.MyObjecti  c                 
    X-  $ rc   r#   clsr   r   s      r   r   LFunctionSpyTests.test_getfullargspec_with_classmethod.<locals>.MyObject.func  	    ur   r#   Nrg   r?   r@   rA   rB   classmethodr   rC   r#   r   r   r   r     s     r   r   r   rg   Nr   r   s      r   $test_getfullargspec_with_classmethod5FunctionSpyTests.test_getfullargspec_with_classmethod  s    	 	
 	8==)((7'89'//*'--())40++R0'001,,b1r   c                 4   U R                  SSS9nU R                  R                  UR                  5        [        R
                  " UR                  5      nU R                  UR                  / SQ5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  / 5        U R                  UR                  5        U R                  UR                  0 5        g)z_Testing FunctionSpy in inspect.getfullargspec() with classmethod
and positional-only arguments
z
            class MyObject:
                @classmethod
                def func(cls, a, b=2, /, c=3):
                    return a * b
            r   r   )r  r   r   r   r   Nr   r   s      r   -test_getfullargspec_with_classmethod_pos_only>FunctionSpyTests.test_getfullargspec_with_classmethod_pos_only  s    
 >> ! " " 	8==)((7'=>'//*'--())62++R0'001,,b1r   c                 .    " S S5      nU R                   R                  UR                  5        [        R                  " UR                  5      nU R                  UR                  S/5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  SS/5        U R                  UR                  SS05        U R                  UR                  0 5        g)z\Testing FunctionSpy in inspect.getfullargspec() with classmethod
and keyword-only arguments
c                   ,    \ rS rSr\SS.S j5       rSrg)TFunctionSpyTests.test_getfullargspec_with_classmethod_keyword_only.<locals>.MyObjecti  r   ra   c                
    X-  $ rc   r#   r   s      r   r   YFunctionSpyTests.test_getfullargspec_with_classmethod_keyword_only.<locals>.MyObject.func   r  r   r#   Nr  r#   r   r   r   r    s    "#  r   r   r  r   r   r   Nr   r   s      r   1test_getfullargspec_with_classmethod_keyword_onlyBFunctionSpyTests.test_getfullargspec_with_classmethod_keyword_only  s    	 	
 	8==)((7w/'//*'--('**+++c3Z8//2
 	 	,,b1r   c                 H    " S S5      nU R                   R                  UR                  5        [        R                  " UR                  5      nU R                  UR                  / SQ5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  / 5        U R                  UR                  5        U R                  UR                  [        [        [        S.5        g)zQTesting FunctionSpy in inspect.getfullargspec() with classmethod
and annotations
c                   8    \ rS rSr\SS\S\S\4S jj5       rSrg)	SFunctionSpyTests.test_getfullargspec_with_classmethod_annotations.<locals>.MyObjecti6  r   r   r    c                 
    X-  $ rc   r#   r   s      r   r   XFunctionSpyTests.test_getfullargspec_with_classmethod_annotations.<locals>.MyObject.func7  r  r   r#   Nrg   )r?   r@   rA   rB   r  r*   r   rC   r#   r   r   r   r  6  s)    S S   r   r   r   rg   r   Nr   r   s      r   0test_getfullargspec_with_classmethod_annotationsAFunctionSpyTests.test_getfullargspec_with_classmethod_annotations2  s    	 	
 	8==)((7'89'//*'--())40++R0'001,,/
 	r   r#   N) r?   r@   rA   rB   __doc__r5   rG   rO   r   rZ   r^   ri   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  rC   r#   r   r   r   r       s    8.42  7  7"  7  7"==:7.2"  2  2*2*.2&  2  222.22&  2  202,02(  2  222.r   r   )r   r   loggingr   unittestr   kgb.tests.baser   	getLoggerr   r   r   r#   r   r   <module>r     s<       
  # 
		5	!&ix ir   