
    j                         S SK Jr  S SKJr  S SKJrJrJrJ	r	J
r
  S SKJrJrJr   " S S\5      r " S S\5      r " S	 S
\5      rg)    )version_info)messages)FutureImportationImportationImportationFromStarImportationSubmoduleImportation)TestCaseskipskipIfc                   z    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSrg)TestImportationObject   c                 d    [        SS S5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nazimport ar   source_statementstrselfbindings     R/var/www/html/KUNJ/venv/lib/python3.13/site-packages/pyflakes/test/test_imports.pytest_import_basic'TestImportationObject.test_import_basic   s6    c4-'':5557|s"""    c                 d    [        SS S5      nUR                  S:X  d   e[        U5      S:X  d   eg )Ncr   zimport a as cza as cr   r   s     r   test_import_as$TestImportationObject.test_import_as   s6    c4-''?:::7|x'''r   c                 b    [        SS 5      nUR                  S:X  d   e[        U5      S:X  d   eg )Na.bz
import a.b)r	   r   r   r   s     r   test_import_submodule+TestImportationObject.test_import_submodule   s4    &ud3''<7777|u$$$r   c                 d    [        SS S5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nr   r!   zimport a.b as ca.b as cr   r   s     r   test_import_submodule_as.TestImportationObject.test_import_submodule_as   s7    c4/''+<<<<7|z)))r   c                 d    [        SS S5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nr   r!   zimport a.b as aza.b as ar   r   s     r   $test_import_submodule_as_source_name:TestImportationObject.test_import_submodule_as_source_name%   s7    c4/''+<<<<7|z)))r   c                 f    [        SS SS5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nr   .zfrom . import az.ar   r   r   r   s     r   test_importfrom_relative.TestImportationObject.test_importfrom_relative*   s9    !#tS#6''+<<<<7|t###r   c                 f    [        SS SS5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nr   ..zfrom .. import a..ar-   r   s     r   test_importfrom_relative_parent5TestImportationObject.test_importfrom_relative_parent/   s9    !#tT37''+====7|u$$$r   c                 f    [        SS SS5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nbr2   zfrom ..a import bz..a.br-   r   s     r   $test_importfrom_relative_with_module:TestImportationObject.test_importfrom_relative_with_module4   9    !#tUC8''+>>>>7|w&&&r   c                 f    [        SS SS5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nr   r2   r6   zfrom ..a import b as cz
..a.b as cr-   r   s     r   'test_importfrom_relative_with_module_as=TestImportationObject.test_importfrom_relative_with_module_as9   9    !#tUC8''+CCCC7||+++r   c                 f    [        SS SS5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nr6   r   zfrom a import br!   r-   r   s     r   test_importfrom_member,TestImportationObject.test_importfrom_member>   s9    !#tS#6''+<<<<7|u$$$r   c                 f    [        SS SS5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nr   r!   zfrom a.b import cza.b.cr-   r   s     r    test_importfrom_submodule_member6TestImportationObject.test_importfrom_submodule_memberC   r9   r   c                 f    [        SS SS5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nr   r   r6   zfrom a import b as cr%   r-   r   s     r   test_importfrom_member_as/TestImportationObject.test_importfrom_member_asH   s9    !#tS#6''+AAAA7|z)))r   c                 f    [        SS SS5      nUR                  S:X  d   e[        U5      S:X  d   eg )Ndr!   r   zfrom a.b import c as dz
a.b.c as dr-   r   s     r   #test_importfrom_submodule_member_as9TestImportationObject.test_importfrom_submodule_member_asM   r=   r   c                 b    [        SS 5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nr!   zfrom a.b import *za.b.*r   r   r   r   s     r   test_importfrom_star*TestImportationObject.test_importfrom_starR   s5    !%.''+>>>>7|w&&&r   c                 b    [        SS 5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nz.bzfrom .b import *z.b.*rL   r   s     r   test_importfrom_star_relative3TestImportationObject.test_importfrom_star_relativeW   s5    !$-''+====7|v%%%r   c                 d    [        SS S 5      nUR                  S:X  d   e[        U5      S:X  d   eg )Nprint_functionz%from __future__ import print_functionz__future__.print_function)r   r   r   r   s     r   test_importfrom_future,TestImportationObject.test_importfrom_future\   s9    #$4dDA''+RRRR7|::::r   c                 D    U R                  S[        R                  5        g)zU
The magic underscore var should be reported as unused when used as an
import alias.
zimport fu as _NflakesmUnusedImportr   s    r   test_unusedImport_underscore2TestImportationObject.test_unusedImport_underscorea   s    
 	$ann5r    N)__name__
__module____qualname____firstlineno__r   r   r"   r&   r)   r.   r3   r7   r;   r?   rB   rE   rI   rM   rP   rT   r\   __static_attributes__r^   r   r   r   r      sW    #
(
%
**
$
%
'
,
%
'
*
,
'
&
;
6r   r   c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S4 r6S5 r7S6 r8S7 r9S8 r:S9 r;S: r<S; r=S< r>S= r?S> r@S? rAS@ rBSA rCSB rDSC rESD rFSE rGSF rHSG rISH rJSI rKSJ rLSK rMSL rNSM rOSN rPSO rQSP rRSQ rSSR rTSS rUST rVSU rWSV rXSW rYSX rZSY r[SZ r\S[ r]\^" S\5      S] 5       r_S^ r`S_ raS` rbSa rcSb rd\e" \fSc:  Sd5      Se 5       rg\e" \fSc:  Sd5      Sf 5       rhSgrigh)iTesti   c                     U R                  S[        R                  [        R                  5        U R                  S[        R                  [        R                  5        g )Nzimport fu, barzfrom baz import fu, barrW   r[   s    r   test_unusedImportTest.test_unusedImportk   s4    $annannE-q~~q~~Nr   c                    U R                  S[        R                  5        U R                  S[        R                  5        U R                  S[        R                  5        U R                  S[        R                  5        U R                  S[        R                  5        U R                  S[        R                  5        U R                  S[        R                  5        U R                  S[        R                  5        U R                  S	[        R                  5        U R                  S[        R                  5      nUR                  S
   nUR                  S:X  d   eUR
                  S:X  d   eU R                  S[        R                  5      nUR                  S
   nUR                  S:X  d   eUR
                  S:X  d   eg )Nzfrom . import fuzfrom . import fu as bazzfrom .. import fuzfrom ... import fuzfrom .. import fu as bazzfrom .bar import fuzfrom ..bar import fuzfrom ...bar import fuzfrom ...bar import fu as bazr   %r imported but unusedz.fu)z
.fu as baz)rX   rY   rZ   r   messagemessage_argsr   checkererrors      r   test_unusedImport_relativeTest.test_unusedImport_relativeo   sF   &7-q~~>'8(!..9.?)1>>:*ANN;+Q^^<2ANNC++0!..A  #}} 8888!!Y...++7H  #}} 8888!!%5555r   c                     U R                  S[        R                  [        R                  5        U R                  S[        R                  [        R                  5        g )Nzimport fu as FU, bar as FUz#from moo import fu as FU, bar as FUrX   rY   RedefinedWhileUnusedrZ   r[   s    r   test_aliasedImportTest.test_aliasedImport   s>    0**ANN	<9**ANN	<r   c                 j    U R                  S5        U R                  S5        U R                  S5        g)z5Imported aliases can shadow the source of the import.zfrom moo import fu as moo; moozimport fu as fu; fuzimport fu.bar as fu; fuNrX   r[   s    r   test_aliasedImportShadowModule#Test.test_aliasedImportShadowModule   s)    45)*-.r   c                 j    U R                  S5        U R                  S5        U R                  S5        g )Nzimport fu; print(fu)zfrom baz import fu; print(fu)zimport fu; del furz   r[   s    r   test_usedImportTest.test_usedImport   s)    *+34'(r   c                     U R                  S5        U R                  S5        U R                  S5        U R                  S5        g )Nzfrom . import fu; assert fuzfrom .bar import fu; assert fuzfrom .. import fu; assert fuz'from ..bar import fu as baz; assert bazrz   r[   s    r   test_usedImport_relativeTest.test_usedImport_relative   s6    124523=>r   c                     U R                  S[        R                  5        U R                  S[        R                  5        U R                  S[        R                  5        g )Nzimport fu; fu = 3zimport fu; fu, bar = 3zimport fu; [fu, bar] = 3rX   rY   rv   r[   s    r   test_redefinedWhileUnusedTest.test_redefinedWhileUnused   sA    ')?)?@,a.D.DE.0F0FGr   c                 D    U R                  S[        R                  5        g)zM
Test that importing a module twice within an if
block does raise a warning.
z[
        i = 2
        if i==1:
            import os
            import os
        os.pathNr   r[   s    r   test_redefinedIfTest.test_redefinedIf   s     
 	 
 **	,r   c                 &    U R                  S5        g)zT
Test that importing a module twice in if
and else blocks does not raise a warning.
zi
        i = 2
        if i==1:
            import os
        else:
            import os
        os.pathNrz   r[   s    r   test_redefinedIfElseTest.test_redefinedIfElse   s    
 	  	r   c                 D    U R                  S[        R                  5        g)zI
Test that importing a module twice in a try block
does raise a warning.
zj
        try:
            import os
            import os
        except:
            pass
        os.pathNr   r[   s    r   test_redefinedTryTest.test_redefinedTry   s     
 	  **	,r   c                 &    U R                  S5        g)zX
Test that importing a module twice in a try
and except block does not raise a warning.
zY
        try:
            import os
        except:
            import os
        os.pathNrz   r[   s    r   test_redefinedTryExceptTest.test_redefinedTryExcept   s    
 	  	r   c                 &    U R                  S5        g)zf
Test that importing a module twice using a nested
try/except and if blocks does not issue a warning.
z
        try:
            if True:
                if True:
                    import os
        except:
            import os
        os.pathNrz   r[   s    r   test_redefinedTryNestedTest.test_redefinedTryNested   s    
 	  	r   c                 &    U R                  S5        g )Nz
        try:
            from aa import mixer
        except AttributeError:
            from bb import mixer
        except RuntimeError:
            from cc import mixer
        except:
            from dd import mixer
        mixer(123)
        rz   r[   s    r   test_redefinedTryExceptMulti!Test.test_redefinedTryExceptMulti   s     
 
	r   c                 D    U R                  S[        R                  5        g )Nz
        try:
            from aa import mixer
        except ImportError:
            pass
        else:
            from bb import mixer
        mixer(123)
        r   r[   s    r   test_redefinedTryElseTest.test_redefinedTryElse   s      ##	%r   c                 &    U R                  S5        g )Nz
        try:
            import funca
        except ImportError:
            from bb import funca
            from bb import funcb
        else:
            from bbb import funcb
        print(funca, funcb)
        rz   r[   s    r   test_redefinedTryExceptElse Test.test_redefinedTryExceptElse   s     	 		r   c                 &    U R                  S5        g )Nz
        try:
            from aa import a
        except ImportError:
            from bb import a
        finally:
            a = 42
        print(a)
        rz   r[   s    r   test_redefinedTryExceptFinally#Test.test_redefinedTryExceptFinally  s      	r   c                 &    U R                  S5        g )Nz
        try:
            import b
        except ImportError:
            b = Ellipsis
            from bb import a
        else:
            from aa import a
        finally:
            a = 42
        print(a, b)
        rz   r[   s    r   "test_redefinedTryExceptElseFinally'Test.test_redefinedTryExceptElseFinally  s      	r   c                 D    U R                  S[        R                  5        g )Nz>
        import fu
        def fu():
            pass
        r   r[   s    r   test_redefinedByFunctionTest.test_redefinedByFunction        ##		%r   c                 b    U R                  S[        R                  [        R                  5        g)Z
Test that shadowing a global name with a nested function definition
generates a warning.
zx
        import fu
        def bar():
            def baz():
                def fu():
                    pass
        Nru   r[   s    r   test_redefinedInNestedFunction#Test.test_redefinedInNestedFunction&  s&    
 	  ##Q^^	5r   c                     U R                  S[        R                  [        R                  [        R                  [        R                  5        g)r   z
        import fu
        def bar():
            import fu
            def baz():
                def fu():
                    pass
        Nru   r[   s    r   #test_redefinedInNestedFunctionTwice(Test.test_redefinedInNestedFunctionTwice3  s5    
 	  **A,B,BNNANN		4r   c                 &    U R                  S5        g)zt
Test that a global import which is redefined locally,
but used later in another scope does not generate a warning.
aq  
        import unittest, transport

        class GetTransportTestCase(unittest.TestCase):
            def test_get_transport(self):
                transport = 'transport'
                self.assertIsNotNone(transport)

        class TestTransportMethodArgs(unittest.TestCase):
            def test_send_defaults(self):
                transport.Transport()
        Nrz   r[   s    r   test_redefinedButUsedLaterTest.test_redefinedButUsedLaterC  s    
 	  	r   c                 D    U R                  S[        R                  5        g )Nz>
        import fu
        class fu:
            pass
        r   r[   s    r   test_redefinedByClassTest.test_redefinedByClassU  r   r   c                 &    U R                  S5        g)z{
If an imported name is redefined by a class statement which also uses
that name in the bases list, no warning is emitted.
zM
        from fu import bar
        class bar(bar):
            pass
        Nrz   r[   s    r   test_redefinedBySubclassTest.test_redefinedBySubclass\  s    
 	  	r   c                 &    U R                  S5        g)zQ
Test that shadowing a global with a class attribute does not produce a
warning.
zS
        import fu
        class bar:
            fu = 1
        print(fu)
        Nrz   r[   s    r   test_redefinedInClassTest.test_redefinedInClassg  s    
 	  	r   c                 f    U R                  S5        U R                  S[        R                  5        g)z>
Test that import within class is a locally scoped attribute.
z2
        class bar:
            import fu
        z>
        class bar:
            import fu

        fu
        NrX   rY   UndefinedNamer[   s    r   test_importInClassTest.test_importInClasss  s1     	  	
 	 
 __	r   c                 &    U R                  S5        g )NzD
        import fu
        def fun():
            print(fu)
        rz   r[   s    r   test_usedInFunctionTest.test_usedInFunction        	r   c                     U R                  S[        R                  [        R                  5        U R                  S5        g )NzF
        import fu
        def fun(fu):
            print(fu)
        zX
        import fu
        def fun(fu):
            print(fu)
        print(fu)
        rX   rY   rZ   rv   r[   s    r   test_shadowedByParameterTest.test_shadowedByParameter  s7      ^^Q33		5 	  	r   c                 &    U R                  S5        g )Nz	fu = Nonerz   r[   s    r   test_newAssignmentTest.test_newAssignment  s    K r   c                 f    U R                  S5        U R                  S[        R                  5        g )Nzimport fu; fu.bar.bazzimport fu; "bar".fu.bazrW   r[   s    r   test_usedInGetattrTest.test_usedInGetattr  s"    +,-q~~>r   c                 &    U R                  S5        g )Nzimport fu; print(fu.bar[1:])rz   r[   s    r   test_usedInSliceTest.test_usedInSlice  s    23r   c                 &    U R                  S5        g )Nz6
        import fu
        if True: print(fu)
        rz   r[   s    r   test_usedInIfBodyTest.test_usedInIfBody        	r   c                 &    U R                  S5        g )Nz/
        import fu
        if fu: pass
        rz   r[   s    r   test_usedInIfConditionalTest.test_usedInIfConditional  r   r   c                 &    U R                  S5        g )NzH
        import fu
        if False: pass
        elif fu: pass
        rz   r[   s    r   test_usedInElifConditionalTest.test_usedInElifConditional  r   r   c                 &    U R                  S5        g )NzJ
        import fu
        if False: pass
        else: print(fu)
        rz   r[   s    r   test_usedInElseTest.test_usedInElse  r   r   c                 &    U R                  S5        g )Nzimport fu; fu.bar()rz   r[   s    r   test_usedInCallTest.test_usedInCall  s    )*r   c                 &    U R                  S5        g )NzC
        import fu
        class bar:
            bar = fu
        rz   r[   s    r   test_usedInClassTest.test_usedInClass  r   r   c                 &    U R                  S5        g )NzO
        import fu
        class bar(object, fu.baz):
            pass
        rz   r[   s    r   test_usedInClassBaseTest.test_usedInClassBase  r   r   c                 &    U R                  S5        g )NzR
        import fu
        def bleh():
            pass
        print(fu)
        rz   r[   s    r   test_notUsedInNestedScopeTest.test_notUsedInNestedScope        	r   c                 &    U R                  S5        g )NzN
        import fu
        for bar in range(9):
            print(fu)
        rz   r[   s    r   test_usedInForTest.test_usedInFor  r   r   c                 &    U R                  S5        g )Nzn
        import fu
        for bar in range(10):
            pass
        else:
            print(fu)
        rz   r[   s    r   test_usedInForElseTest.test_usedInForElse        	r   c                 D    U R                  S[        R                  5        g )NzH
        import fu
        for fu in range(2):
            pass
        rX   rY   ImportShadowedByLoopVarr[   s    r   test_redefinedByForTest.test_redefinedByFor  s      &&		(r   c                 D    U R                  S[        R                  5        g)zQ
Test that shadowing a global name with a for loop variable generates a
warning.
zS
        import fu
        fu.bar()
        for fu in ():
            pass
        Nr   r[   s    r   test_shadowedByForTest.test_shadowedByFor  s     
 	 
 &&	(r   c                     U R                  S[        R                  5        U R                  S[        R                  5        g)zj
Test that shadowing a global name with a for loop variable nested in a
tuple unpack generates a warning.
zl
        import fu
        fu.bar()
        for (x, y, z, (a, b, c, (fu,))) in ():
            pass
        zl
        import fu
        fu.bar()
        for [x, y, z, (a, b, c, (fu,))] in ():
            pass
        Nr   r[   s    r   test_shadowedByForDeepTest.test_shadowedByForDeep  s>    
 	 
 &&	( 	 
 &&	(r   c                 &    U R                  S5        g )NzD
        import fu
        def fun():
            return fu
        rz   r[   s    r   test_usedInReturnTest.test_usedInReturn  r   r   c                    U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S	5        U R                  S
5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        g )Nzimport fu; 3 + fu.barzimport fu; 3 % fu.barzimport fu; 3 - fu.barzimport fu; 3 * fu.barzimport fu; 3 ** fu.barzimport fu; 3 / fu.barzimport fu; 3 // fu.barzimport fu; -fu.barzimport fu; ~fu.barzimport fu; 1 == fu.barzimport fu; 1 | fu.barzimport fu; 1 & fu.barzimport fu; 1 ^ fu.barzimport fu; 1 >> fu.barzimport fu; 1 << fu.barrz   r[   s    r   test_usedInOperatorsTest.test_usedInOperators  s    +,+,+,+,,-+,,-()(),-+,+,+,,-,-r   c                 &    U R                  S5        g )Nzimport fu; assert fu.barrz   r[   s    r   test_usedInAssertTest.test_usedInAssert#  s    ./r   c                 &    U R                  S5        g )Nzimport fu; fu.bar[1]rz   r[   s    r   test_usedInSubscriptTest.test_usedInSubscript&  s    *+r   c                 j    U R                  S5        U R                  S5        U R                  S5        g )Nzimport fu; fu and Falsezimport fu; fu or Falsezimport fu; not fu.barrz   r[   s    r   test_usedInLogicTest.test_usedInLogic)  s)    -.,-+,r   c                 &    U R                  S5        g )Nzimport fu; [fu]rz   r[   s    r   test_usedInListTest.test_usedInList.  s    %&r   c                 &    U R                  S5        g )Nzimport fu; (fu,)rz   r[   s    r   test_usedInTupleTest.test_usedInTuple1  s    &'r   c                 &    U R                  S5        g Nz@
        import fu
        try: fu
        except: pass
        rz   r[   s    r   test_usedInTryTest.test_usedInTry4  r   r   c                 &    U R                  S5        g r  rz   r[   s    r   test_usedInExceptTest.test_usedInExcept;  r   r   c                     [         R                  /nUR                  [         R                  5        U R                  " S/UQ76   g )NzR
        import fu
        try: pass
        except Exception as fu: pass
        )rY   rv   appendUnusedVariablerX   )r   expecteds     r   test_redefinedByExceptTest.test_redefinedByExceptB  s=    **+(()  	 		r   c                 &    U R                  S5        g )Nz0
        import fu
        raise fu.bar
        rz   r[   s    r   test_usedInRaiseTest.test_usedInRaiseL  r   r   c                 &    U R                  S5        g )NzC
        import fu
        def gen():
            yield fu
        rz   r[   s    r   test_usedInYieldTest.test_usedInYieldR  r   r   c                 H    U R                  S5        U R                  S5        g )Nzimport fu; {fu:None}zimport fu; {1:fu}rz   r[   s    r   test_usedInDictTest.test_usedInDictY  s    *+'(r   c                 &    U R                  S5        g )NzC
        import fu
        def f(bar=fu):
            pass
        rz   r[   s    r   test_usedInParameterDefault Test.test_usedInParameterDefault]  r   r   c                 &    U R                  S5        g )Nzimport fu; fu.bar = 1rz   r[   s    r   test_usedInAttributeAssignTest.test_usedInAttributeAssignd      +,r   c                 &    U R                  S5        g )Nzimport fu; fu.bar(stuff=fu)rz   r[   s    r   test_usedInKeywordArgTest.test_usedInKeywordArgg  s    12r   c                 H    U R                  S5        U R                  S5        g )Nzimport fu; bar=fuzimport fu; n=0; n+=furz   r[   s    r   test_usedInAssignmentTest.test_usedInAssignmentj  s    '(+,r   c                 H    U R                  S5        U R                  S5        g )Nz!import fu; [fu for _ in range(1)]z&import fu; [1 for _ in range(1) if fu]rz   r[   s    r   test_usedInListCompTest.test_usedInListCompn  s    78<=r   c                 H    U R                  S5        U R                  S5        g )NzA
        import fu
        try: pass
        finally: fu
        zA
        import fu
        try: fu
        finally: pass
        rz   r[   s    r   test_usedInTryFinallyTest.test_usedInTryFinallyr  s&      	 	  	r   c                 H    U R                  S5        U R                  S5        g )Nz;
        import fu
        while 0:
            fu
        z2
        import fu
        while fu: pass
        rz   r[   s    r   test_usedInWhileTest.test_usedInWhile  s&      	 	  	r   c                 b    U R                  S[        R                  [        R                  5        g)z\
A 'global' statement shadowing an unused import should not prevent it
from being reported.
z6
        import fu
        def f(): global fu
        N)rX   rY   rZ   UnusedIndirectAssignmentr[   s    r   test_usedInGlobalTest.test_usedInGlobal  s&    
 	  ^^Q77	9r   c                 D    U R                  S[        R                  5        g)z\
A 'global' statement shadowing a used import should not cause it to be
reported as unused.
zc
            import foo
            def f(): global foo
            def g(): foo.is_used()
        N)rX   rY   r@  r[   s    r   test_usedAndGlobalTest.test_usedAndGlobal  s     
 	  ''		)r   c                 &    U R                  S5        g)zV
Binding an import to a declared global should not cause it to be
reported as unused.
zX
            def f(): global foo; import foo
            def g(): foo.is_used()
        Nrz   r[   s    r   test_assignedToGlobalTest.test_assignedToGlobal  s    
 	  	r   c                 0    SnU R                  SU-  5        g )Nzexec("print(1)", fu.bar)zimport fu; %srz   )r   	exec_stmts     r   test_usedInExecTest.test_usedInExec  s    .	Oi/0r   c                 &    U R                  S5        g )Nzimport fu; lambda: furz   r[   s    r   test_usedInLambdaTest.test_usedInLambda  r/  r   c                     U R                  S[        R                  [        R                  5        U R                  S5        g )Nzimport fu; lambda fu: fuzimport fu; lambda fu: fu
fu()r   r[   s    r   test_shadowedByLambdaTest.test_shadowedByLambda  s-    .NNA$:$:	<45r   c                 &    U R                  S5        g )Nzimport fu; "meow"[::fu]rz   r[   s    r   test_usedInSliceObjTest.test_usedInSliceObj  s    -.r   c                 b    U R                  S[        R                  [        R                  5        g )Nz=
        def bar():
            import fu
        fu
        )rX   rY   rZ   r   r[   s    r   test_unusedInNestedScopeTest.test_unusedInNestedScope  s"      ^^Q__		.r   c                 D    U R                  S[        R                  5        g )Nz`
        class bar:
            import fu
            def fun(self):
                fu
        r   r[   s    r   test_methodsDontUseClassScope"Test.test_methodsDontUseClassScope  s     
 __	r   c                 &    U R                  S5        g )NzX
        def a():
            def b():
                fu
            import fu
        rz   r[   s    r   test_nestedFunctionsNestScope"Test.test_nestedFunctionsNestScope  r   r   c                 &    U R                  S5        g )Nz
        def a():
            import fu
            class b:
                def c(self):
                    print(fu)
        rz   r[   s    r    test_nestedClassAndFunctionScope%Test.test_nestedClassAndFunctionScope  r   r   c                 
   U R                  S[        R                  [        R                  5        U R                  S[        R                  [        R                  5        U R                  S[        R                  [        R                  5      nUR                  S   nUR
                  R                  S5      (       d   eUR                  S:X  d   eUR                  S   nUR
                  S:X  d   eUR                  S:X  d   eg	)
z,Use of import * at module level is reported.zfrom fu import *zT
        try:
            from fu import *
        except:
            pass
        r    'from %s import *' used; unable )fu   rk   )zfu.*NrX   rY   ImportStarUsedrZ   r   rm   
startswithrn   ro   s      r   test_importStarTest.test_importStar  s    &(8(8!..I 
 q~~	/ ++0..@   #}}''(JKKKK!!X---  #}} 8888!!Z///r   c                 T   U R                  S[        R                  [        R                  5        U R                  S[        R                  [        R                  5        U R                  S[        R                  [        R                  5      nUR                  S   nUR
                  R                  S5      (       d   eUR                  S:X  d   eUR                  S   nUR
                  S:X  d   eUR                  S:X  d   eU R                  S	[        R                  [        R                  5      nUR                  S   nUR
                  R                  S5      (       d   eUR                  S
:X  d   eUR                  S   nUR
                  S:X  d   eUR                  S:X  d   eg)z3Use of import * from a relative import is reported.zfrom .fu import *zU
        try:
            from .fu import *
        except:
            pass
        r   rc  rl   re  rk   )z.fu.*from .. import *r1   )rl  Nrf  ro   s      r   test_importStar_relativeTest.test_importStar_relative  sv   ')9)91>>J 
 q~~	/ ++1..@   #}}''(JKKKK!!Y...  #}} 8888!![000++0..@   #}}''(JKKKK!!X---  #}} 8888!!%;;;;r   c                 *   U R                  S[        R                  5        U R                  S[        R                  5        U R                  S[        R                  5      nUR                  S   nUR                  S:X  d   eUR
                  S:X  d   eg)z)import * is only allowed at module level.z7
        def a():
            from fu import *
        z7
        class a:
            from fu import *
        z7
        class a:
            from .. import *
        r   z/'from %s import *' only allowed at module levelrm  N)rX   rY   ImportStarNotPermittedr   rm   rn   ro   s      r   test_localImportStarTest.test_localImportStar  s      %%	' 	  %%	'
 ++  %%'   #}} QQQQ!!X---r   c                 &    U R                  S5        g)z@
If a dotted name is imported and used, no warning is reported.
z.
        import fu.bar
        fu.bar
        Nrz   r[   s    r   test_packageImportTest.test_packageImport!  s     	  	r   c                 D    U R                  S[        R                  5        g)zR
If a dotted name is imported and not used, an unused import warning is
reported.
zimport fu.barNrW   r[   s    r   test_unusedPackageImportTest.test_unusedPackageImport*  s    
 	OQ^^4r   c                     U R                  S[        R                  5        U R                  S[        R                  5        g)z|
If a submodule of a package is imported twice, an unused import warning
and a redefined while unused warning are reported.
z6
        import fu.bar, fu.bar
        fu.bar
        zD
        import fu.bar
        import fu.bar
        fu.bar
        Nr   r[   s    r   test_duplicateSubmoduleImport"Test.test_duplicateSubmoduleImport1  s>    
 	  ##	% 	  ##		%r   c                 H    U R                  S5        U R                  S5        g)zq
If two different submodules of a package are imported, no duplicate
import warning is reported for the package.
z>
        import fu.bar, fu.baz
        fu.bar, fu.baz
        zL
        import fu.bar
        import fu.baz
        fu.bar, fu.baz
        Nrz   r[   s    r   test_differentSubmoduleImport"Test.test_differentSubmoduleImport@  s(    
 	  	 	  	r   c                 H    U R                  S5        U R                  S5        g)z3
Usage of package marks submodule imports as used.
z>
        import fu
        import fu.bar
        fu.x
        z>
        import fu.bar
        import fu
        fu.x
        Nrz   r[   s    r   'test_used_package_with_submodule_import,Test.test_used_package_with_submodule_importO  (     	  	 	  	r   c                 H    U R                  S5        U R                  S5        g)z<
Usage of package by alias marks submodule imports as used.
zU
        import foo as f
        import foo.bar
        f.bar.do_something()
        z_
        import foo as f
        import foo.bar.blah
        f.bar.blah.do_something()
        Nrz   r[   s    r   0test_used_package_with_submodule_import_of_alias5Test.test_used_package_with_submodule_import_of_alias_  r  r   c                     U R                  S[        R                  5      nUR                  S   nUR                  S:X  d   eUR
                  S:X  d   eU R                  (       a  UR                  S:X  d   egg)zB
When a package and its submodule are imported, only report once.
z1
        import fu
        import fu.bar
        r   rk   )zfu.bar   N)rX   rY   rZ   r   rm   rn   withDoctestlinenoro   s      r   )test_unused_package_with_submodule_import.Test.test_unused_package_with_submodule_importo  sx     ++  ^^   #}} 8888!!\111$($4$4u||q ;;! r   c                     U R                  S5        U R                  S5        U R                  S5        U R                  S5        g )Nzimport fu; fu = fuzimport fu; fu, bar = fuzimport fu; [fu, bar] = fuzimport fu; fu += furz   r[   s    r   test_assignRHSFirstTest.test_assignRHSFirst|  s6    ()-./0)*r   c                 &    U R                  S5        g )Nzp
        try:
            import fu
        except ImportError:
            import bar as fu
        fu
        rz   r[   s    r   test_tryingMultipleImportsTest.test_tryingMultipleImports  r   r   c                 &    U R                  S5        g )Nz`
        import fu
        def a():
            fu = 3
            return fu
        fu
        rz   r[   s    r   test_nonGlobalDoesNotRedefine"Test.test_nonGlobalDoesNotRedefine  r   r   c                 &    U R                  S5        g )Nz;
        def a():
            fu
        import fu
        rz   r[   s    r   test_functionsRunLaterTest.test_functionsRunLater  r   r   c                 D    U R                  S[        R                  5        g )NzG
        import fu
        def fu():
            fu
        fu
        r   r[   s    r   test_functionNamesAreBoundNow"Test.test_functionNamesAreBoundNow  s     
 ##	%r   c                 &    U R                  S5        g )Nza = 1; a = 2rz   r[   s    r   !test_ignoreNonImportRedefinitions&Test.test_ignoreNonImportRedefinitions  s    N#r   todoc                 &    U R                  S5        g )NzY
        try:
            import fu
        except ImportError:
            pass
        rz   r[   s    r   test_importingForImportError!Test.test_importingForImportError        	r   c                 &    U R                  S5        g)z0Imports in class scope can be used through self.zf
        class c:
            import i
            def __init__(self):
                self.i
        Nrz   r[   s    r   test_importedInClassTest.test_importedInClass  r  r   c                 &    U R                  S5        g)zG
Method named 'foo' with default args referring to module named 'foo'.
z
        import foo

        class Thing(object):
            def foo(self, parser=foo.parse_foo):
                pass
        Nrz   r[   s    r   !test_importUsedInMethodDefinition&Test.test_importUsedInMethodDefinition  s     	  	r   c                 H    U R                  S5        U R                  S5        g)z__future__ is special.zfrom __future__ import divisionze
        "docstring is allowed before future import"
        from __future__ import division
        Nrz   r[   s    r   test_futureImportTest.test_futureImport  s     56  	r   c                     U R                  S[        R                  5        U R                  S[        R                  5        g)z4
__future__ imports must come before anything else.
z?
        x = 5
        from __future__ import division
        zY
        from foo import bar
        from __future__ import division
        bar
        N)rX   rY   LateFutureImportr[   s    r   test_futureImportFirstTest.test_futureImportFirst  s>     	  	! 	  		!r   c                 &    U R                  S5        g)z?__future__ is special, but names are injected in the namespace.z
        from __future__ import division
        from __future__ import print_function

        assert print_function is not division
        Nrz   r[   s    r   test_futureImportUsedTest.test_futureImportUsed  r  r   )   r   zin 3.14+ this is a SyntaxErrorc                 D    U R                  S[        R                  5        g)z0Importing undefined names from __future__ fails.z8
        from __future__ import print_statement
        NrX   rY   FutureFeatureNotDefinedr[   s    r   test_futureImportUndefinedTest.test_futureImportUndefined       	 &&	(r   c                 D    U R                  S[        R                  5        g)z$Importing '*' from __future__ fails.z*
        from __future__ import *
        Nr  r[   s    r   test_futureImportStarTest.test_futureImportStar  r  r   r^   N)jr_   r`   ra   rb   rh   rr   rw   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r!  r$  r'  r*  r-  r1  r4  r7  r:  r=  rA  rD  rG  rK  rN  rQ  rT  rW  rZ  r]  r`  ri  rn  rr  ru  rx  r{  r~  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r   r   r  r  rc   r^   r   r   re   re   i   s<   O6.</)
?H

,,
	%
	%54 $%	
 !?4+(
((&."0,-
'()-3->
9	)1-6
/.0*<@.&5%  <+%$ 
&\ 
! LG#%EF( G( LG#%EF( G(r   re   c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rSrg)TestSpecialAlli  z@
Tests for suppression of unused import warnings by C{__all__}.
c                 b    U R                  S[        R                  [        R                  5        g)zX
An C{__all__} definition does not suppress unused import warnings in a
function scope.
zQ
        def foo():
            import bar
            __all__ = ["bar"]
        N)rX   rY   rZ   r  r[   s    r   test_ignoredInFunction%TestSpecialAll.test_ignoredInFunction  s&    
 	  ^^Q--		/r   c                 D    U R                  S[        R                  5        g)zO
An C{__all__} definition in a class does not suppress unused import warnings.
zM
        import bar
        class foo:
            __all__ = ["bar"]
        NrW   r[   s    r   test_ignoredInClass"TestSpecialAll.test_ignoredInClass  s     	  ^^		r   c                 D    U R                  S[        R                  5        g )Nz:
        import bar
        (__all__,) = ("foo",)
        rW   r[   s    r   'test_ignored_when_not_directly_assigned6TestSpecialAll.test_ignored_when_not_directly_assigned  s      ^^	r   c                 H    U R                  S5        U R                  S5        g)zV
If a name is imported and unused but is named in C{__all__}, no warning
is reported.
z6
        import foo
        __all__ = ["foo"]
        z7
        import foo
        __all__ = ("foo",)
        Nrz   r[   s    r   test_warningSuppressed%TestSpecialAll.test_warningSuppressed  s(    
 	  	 	  	r   c                 b    U R                  S[        R                  [        R                  5        g)z3
The C{__all__} variable is defined incrementally.
z
        import a
        import c
        __all__ = ['a']
        __all__ += ['b']
        if 1 < 3:
            __all__ += ['c', 'd']
        NrX   rY   UndefinedExportr[   s    r   test_augmentedAssignment'TestSpecialAll.test_augmentedAssignment  s(     	   1 1	3r   c                     U R                  S[        R                  [        R                  [        R                  [        R                  5        g)z@
The C{__all__} variable is defined through list concatenation.
zD
        import sys
        __all__ = ['a'] + ['b'] + ['c']
        NrX   rY   r  rZ   r[   s    r   "test_list_concatenation_assignment1TestSpecialAll.test_list_concatenation_assignment,  7     	   1 113D3Dann	Vr   c                     U R                  S[        R                  [        R                  [        R                  [        R                  5        g)zA
The C{__all__} variable is defined through tuple concatenation.
zG
        import sys
        __all__ = ('a',) + ('b',) + ('c',)
        Nr  r[   s    r   #test_tuple_concatenation_assignment2TestSpecialAll.test_tuple_concatenation_assignment5  r  r   c                 &    U R                  S5        g )NzF
        from foo import bar
        __all__ = [bar.__name__]
        rz   r[   s    r   test_all_with_attributes'TestSpecialAll.test_all_with_attributes>  r   r   c                 &    U R                  S5        g )Nz=
        from foo import bar
        __all__ = [bar]
        rz   r[   s    r   test_all_with_names"TestSpecialAll.test_all_with_namesD  s      	r   c                 &    U R                  S5        g )Nzs
        from foo import bar
        from bar import baz
        __all__ = [bar.__name__] + [baz.__name__]
        rz   r[   s    r   test_all_with_attributes_added-TestSpecialAll.test_all_with_attributes_addedK  r   r   c                 &    U R                  S5        g )Nzi
        from foo import bar
        from foo import baz
        __all__ = ['bar', baz.__name__]
        rz   r[   s    r   %test_all_mixed_attributes_and_strings4TestSpecialAll.test_all_mixed_attributes_and_stringsR  r   r   c                 v    U R                  S[        R                  5        S H  nU R                  SUS9  M     g)zI
If C{__all__} includes a name which is not bound, a warning is emitted.
z#
        __all__ = ["foo"]
        )zfoo/__init__.pyz__init__.pyz+
            __all__ = ["foo"]
            )filenameNr  )r   r  s     r   test_unboundExported#TestSpecialAll.test_unboundExportedY  sC     	 	  ;HKK "  $ ;r   c                     U R                  S[        R                  [        R                  [        R                  [        R                  5        g)z&
Report undefined if import * is used
zT
        from math import *
        __all__ = ['sin', 'cos']
        csc(1)
        N)rX   rY   rg  ImportStarUsager[   s    r   test_importStarExported&TestSpecialAll.test_importStarExportedh  s9     	  q00!2C2CQEVEV		Xr   c                 b    U R                  S[        R                  [        R                  5        g)z8Report unused import when not needed to satisfy __all__.zL
        from foolib import *
        a = 1
        __all__ = ['a']
        N)rX   rY   rg  rZ   r[   s    r   test_importStarNotExported)TestSpecialAll.test_importStarNotExportedr  s$      q~~		/r   c                 H    U R                  S5        U R                  S5        g)zB
Using a global in a generator expression results in no warnings.
z!import fu; (fu for _ in range(1))z&import fu; (1 for _ in range(1) if fu)Nrz   r[   s    r   test_usedInGenExp TestSpecialAll.test_usedInGenExpz  s     	78<=r   c                 b    U R                  S[        R                  [        R                  5        g)zk
Re-using a global name as the loop variable for a generator
expression results in a redefinition warning.
z!import fu; (1 for fu in range(1))Nru   r[   s    r   test_redefinedByGenExp%TestSpecialAll.test_redefinedByGenExp  s"    
 	7**ANN	<r   c                     U R                  S5        U R                  S5        U R                  S[        R                  5        g)z
Using a global name in a decorator statement results in no warnings,
but using an undefined name in a decorator statement results in an
undefined name warning.
zm
        from interior import decorate
        @decorate
        def f():
            return "hello"
        zv
        from interior import decorate
        @decorate('value')
        def f():
            return "hello"
        zG
        @decorate
        def f():
            return "hello"
        Nr   r[   s    r   test_usedAsDecorator#TestSpecialAll.test_usedAsDecorator  D     	  	 	  	 	  __		r   c                     U R                  S5        U R                  S5        U R                  S[        R                  5        g)z
Using an imported name as a class decorator results in no warnings,
but using an undefined name as a class decorator results in an
undefined name warning.
ze
        from interior import decorate
        @decorate
        class foo:
            pass
        zl
        from interior import decorate
        @decorate("foo")
        class bar:
            pass
        z?
        @decorate
        class foo:
            pass
        Nr   r[   s    r   test_usedAsClassDecorator(TestSpecialAll.test_usedAsClassDecorator  r  r   r^   N)r_   r`   ra   rb   __doc__r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rc   r^   r   r   r  r    sd    	/3VV$X/><4r   r  N)sysr   pyflakesr   rY   pyflakes.checkerr   r   r   r   r	   pyflakes.test.harnessr
   r   r   r   re   r  r^   r   r   <module>r     sI     "  9 8X6H X6vF(8 F(RIX Ir   