
    JG_-                        d Z ddlZddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZ ddlmZ ddlmZmZ dd	lmZ d
ZefdededefdZ ed      efdededeeef   fd       Zdedede
eeef      fdZdedede
eeef      fdZdedede
eeef      fdZ	 	 d!dedede
e	e      deedf   de
eeef      f
dZdedefdZdedefdZdedee   defdZdededefd Zy)"zIContains all logic related to placing an import within a certain section.    N)fnmatch)	lru_cache)Path)	FrozenSetIterableOptionalTuple)sections)DEFAULT_CONFIGConfig)exists_case_sensitiveLOCALFOLDERnameconfigreturnc                      t        | |      d   S )z8Returns the section placement for the given module name.r   )module_with_reasonr   r   s     -/usr/lib/python3/dist-packages/isort/place.pymoduler      s    dF+A..    i  )maxsizec                     t        | |      xs8 t        | |      xs* t        | |      xs t        | |      xs |j                  dfS )zPReturns the section placement for the given module name alongside the reasoning.z.Default option in Config or universal default.)_forced_separate_local_known_pattern	_src_pathdefault_sectionr   s     r   r   r      s\     	v& 	V$	V$'	V T6"	V ""$TUr   c                     |j                   D ]?  }|}|j                  d      sd|z  }t        | |      st        | d|z         s7|d| dfc S  y )N*z%s*.zMatched forced_separate (z) config value.)forced_separateendswithr   )r   r   r"   	path_globs       r   r   r       si    !11 c#	'',/I4#wtS9_'E#'@@QQ`%abbc r   c                 6    | j                  d      rt        dfS y )Nr!   zModule name started with a dot.)
startswithLOCALr   s     r   r   r   -   s    s899r   c                     | j                  d      fdt        t              dd      D        }|D ]A  }|j                  D ]0  \  }}||j                  v s|j                  |      s'|d| fc c S  C y )Nr!   c              3   F   K   | ]  }d j                  d|         yw)r!   N)join).0first_kpartss     r   	<genexpr>z!_known_pattern.<locals>.<genexpr>6   s      _7SXXeHWo6_s   !r   z!Matched configured known pattern )splitrangelenknown_patternsr
   match)r   r   module_names_to_checkmodule_name_to_checkpattern	placementr-   s         @r   r   r   4   s    JJsOE_eCPUJXY[]F^_ 5 R"("7"7 	RGYFOO+>R0S!%Fwi#PQQ	RR
 r   	src_pathsprefix.c                    ||j                   }| j                  dd      ^}}||fz   }dj                  |      }|D ]  }||z  j                         }	|s/|	j	                         s|j
                  |k(  r|j                         }	|rD||j                  v s"|j                  r*t        |	|j                        rt        |d   ||	f|      c S t        |	      st        |	      st        ||      st        j                  d| dfc S  y )Nr!      r   z*Found in one of the configured src_paths: )r9   r0   r*   resolveis_dirr   namespace_packages auto_identify_namespace_packages_is_namespace_packagesupported_extensionsr   
_is_module_is_package_src_path_is_moduler
   
FIRSTPARTY)
r   r   r9   r:   root_module_namenested_module
new_prefix	namespacesrc_pathmodule_paths
             r   r   r   ?   s    $$	'+zz#q'9$}+--J$I c"22;;=k002x}}HX7X"**,K22277)+v7R7RS ]1-v~zRR{#;'"8-=>''+UV^U__`)abb#c& r   pathc                      t        t         j                  d                  xsE t         fdt        j
                  j                  D              xs t        t         dz              S )Nz.pyc              3   d   K   | ]'  }t        t        j                  |                   ) y wN)r   strwith_suffix)r+   
ext_suffixrM   s     r   r.   z_is_module.<locals>.<genexpr>e   s.      
 "#d&6&6z&B"CD
s   -0__init__.py)r   rQ   rR   any	importlib	machineryEXTENSION_SUFFIXESrM   s   `r   rC   rC   b   s_    c$"2"25"9:; 	< 
'11DD
 
	<
 !TM%9!:;r   c                 N    t        t        |             xr | j                         S rP   )r   rQ   r>   rY   s    r   rD   rD   m   s     T+==r   src_extensionsc                    t        |       sy| dz  }|j                         sZ| j                         D cg c]=  }|j                  j	                  d      |v s|j
                  j                         dv r|? }}|ryy
|j                         5 }|j                  d      }d|vrd|vrd|vrd	|vr
	 d d d        yd d d        y
c c}w # 1 sw Y   y
xY w)NFrT   r!   )z	setup.cfgzpyproject.tomli   z7__import__('pkg_resources').declare_namespace(__name__)z7__import__("pkg_resources").declare_namespace(__name__)z@__path__ = __import__('pkgutil').extend_path(__path__, __name__)z@__path__ = __import__("pkgutil").extend_path(__path__, __name__)T)	rD   existsiterdirsuffixlstripr   loweropenread)rM   r[   	init_filefilepath	filenamesopen_init_file
file_starts          r   rA   rA   q   s    t}$I !LLN
%%c*n<}}""$(GG 
	 
   ^^ 
	',,T2JIQ[[MU__V!"V!" 
	 
	 
	 )

	 s   AC#CCrK   module_namec                 p    || j                   k(  xr& | j                         xr t        t        |             S rP   )r   r>   r   rQ   )rK   ri   s     r   rE   rE      s1    x}}$c):c?TUXYaUb?cr   )N ) __doc__rV   r   	functoolsr   pathlibr   typingr   r   r   r	   isortr
   isort.settingsr   r   isort.utilsr   r'   rQ   r   r   r   r   r   r   boolrC   rD   rA   rE   rk   r   r   <module>rt      s   O     7 7  1 - (6 / /f /# /
 43A S & eCQTHo  
3 
 
8E#s(O3L 
 f %S/)B  f %S/1J  +/ 	 
   '  #s(O	 
 eCHo FT d >d >t > in  :$ S T r   