
    c              
          d Z ddlZddl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mZmZmZmZ 	 ddej        d	ee         d
ee         fdZdej        d	ee         ded
efdZ	 ddej        dej        ded
efdZdee	eef                  d
ee         fdZdee	eeef                  d
ee	eef                  fdZdej        ded
efdZ	 ddeded
eeddf         fdZdS )z*Utility functions for the autoimport code.    N)OrderedDict)	GeneratorListOptionalTuple)Project   )ModuleCompiled
ModuleFile
ModuleInfoPackagePackageTypeSourcepackage_pathprojectreturnc                 H   | j         }|                    d          s|dk    rdS |                    d          rdS |                                 r|                    d          r(|                    d          d         }t
          j        }nt|                    d          r(|                    d          d         }t
          j        }n7|                    d          r| j        }t
          j        }ndS t
          j	        }t          | ||          }t          ||| |          S )	z
    Get package name and type from a path.

    Checks for common issues, such as not being a viable python module
    Returns None if not a viable package.
    .__pycache__N)z	.egg-infoz
.dist-infoz.sor   z.pyd.py)name
startswithendswithis_filesplitr   COMPILEDstemSINGLE_FILESTANDARDget_package_sourcer   )r   r   package_namepackage_typepackage_sources        =lib/python3.11/site-packages/rope/contrib/autoimport/utils.pyget_package_tupler%      s-     $Ls## |}'D t899 t ,  '' 
	'--c2215L&/LL""6** 	'--c2215L&/LL""5)) 	',L&2LL4"+/g|TTN<|LLL    packager   c                    |t           j        v rt          j        S |"|j        t          |           v rt          j        S d| j        v rt          j        S t           j	        dk     r9t          |           
                    t           j                  rt          j        S n|t           j        v rt          j        S t          j        S )zADetect the source of a given package. Rudimentary implementation.Nzsite-packages)   
   r   )sysbuiltin_module_namesr   BUILTINaddressstrPROJECTpartsSITE_PACKAGEversion_infor   prefixr   stdlib_module_namesUNKNOWN)r'   r   r   s      r$   r    r    -   s     s'' ~ w#g,,> ~'-' #""
*$ #w<<""3:.. 	#?"	# 3** 	#?">r&   Tmodpathadd_package_namec                    |j         }|                     |          j        }d}t          |          dk    r8|dd         D ]}||z  }|dz  }|d         dk    r|dd         }n
|| j         z   }|r|dk    r|n|dz   |z   }n|dk    sJ |S )z2Get module name from a path in respect to package. r   Nr   __init__.py)r   relative_tor1   len)r7   r   r8   r!   rel_path_partsmodnameparts          r$   get_modname_from_pathrB   @   s     %)L((66<NG
>Q -"3B3' 	 	DtOGsNGG". 	-crclGG,G ")R-Q,,\C5G'5Q#~Nr&   resultsc                     t          | d           } d | D             }t          t          j        |                    S )z4Sort and deduplicate a list of name, source entries.c                     | d         S Nr;    ys    r$   <lambda>z&sort_and_deduplicate.<locals>.<lambda>X   
    AbE r&   keyc                     g | ]\  }}|S rG   rG   ).0r   sources      r$   
<listcomp>z(sort_and_deduplicate.<locals>.<listcomp>Y   s    777|tVd777r&   sortedlistr   fromkeysrC   results_sorteds     r$   sort_and_deduplicaterX   V   sB    W//222G77w777N$^44555r&   c                     t          | d           } d | D             }t          t          j        |                    S )z<Sort and deduplicate a list of name, module, source entries.c                     | d         S rF   rG   rH   s    r$   rJ   z,sort_and_deduplicate_tuple.<locals>.<lambda>a   rK   r&   rL   c                 "    g | ]}|d d         S rF   rG   )rO   results     r$   rQ   z.sort_and_deduplicate_tuple.<locals>.<listcomp>b   s     888ffSbSk888r&   rR   rV   s     r$   sort_and_deduplicate_tupler]   ]   sD     W//222G88888N$^44555r&   path
underlinedc                 F    |rdS t          d | j        D                       S )NTc              3   B   K   | ]}|                     d            V  dS )_N)r   )rO   rA   s     r$   	<genexpr>zshould_parse.<locals>.<genexpr>i   s1      ??D4??3'''??????r&   )allr1   )r^   r_   s     r$   should_parsere   f   s.     t??DJ??????r&   Fc              #     K   | j         t          j        t          j        fv r<| j        t
          j        t
          j        fv rt          d| j        |d          V  dS dS | j         t          j	        k    r@| j
        sJ | j
        j        dk    sJ t          | j
        | j
        j        |d          V  dS | j
        sJ | j
                            d          D ]q}|j        dk    r-t          |t          |j        | j
                  |d          V  :t#          ||          r't          |t          || j
                  |d          V  rdS )z:Find all files to parse in a given path using __init__.py.NTr   Fz*.pyr<   )typer   r   r-   rP   r   r   r
   r   r   r^   suffixr   r   globrB   parentre   )r'   r_   files      r$   	get_filesrl   l   s      |,k.ABB >fov~>> 	G w|ZFFFFFFF	G 	G	0	0 ||"e++++w|'8*eLLLLLLL|L%%f-- 	 	DyM) 
 )$+w|DD	      dJ//  /glCCZQV    	 	r&   )N)T)F)__doc__pathlibr+   collectionsr   typingr   r   r   r   rope.base.projectr   defsr
   r   r   r   r   r   Pathr%   r/   r    boolrB   intrX   r]   re   rl   rG   r&   r$   <module>rv      sR   0 0  



 # # # # # # 3 3 3 3 3 3 3 3 3 3 3 3 % % % % % % V V V V V V V V V V V V V V V V >BM M,M)1'):MgM M M MB\$,W$5=@   ( QU \)0IM   ,6$uS#X"7 6DI 6 6 6 66%S#&'6	%S/6 6 6 6@w| @ @$ @ @ @ @ */ "&z4%&     r&   