o
    ~#g                  	   @   s   d Z ddl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 ddlmZ dd	d
Zde	e dedee de
e fddZdededee fddZdS )zBLogic that powers autocompletion installed by ``pip completion``.
    N)chain)AnyIterableListOptional)create_main_parser)commands_dictcreate_command)get_default_environmentreturnc                     s  dt jvrdS t jd  dd tt jd } z| d   W n ty,   d Y nw t }tt}g }d}D ]
}||v rD|} nq:|dur|dkrSt	d  
d o\|d	v }|rt }  fd
d|jddD }|r|D ]}	t|	 qxt	d  
d o|dk}
|
rt dD ]}t| qt	d t|}|jjD ]}|jtjkr|j|j D ]
}|||jf qqdd d| d  D fdd|D } fdd|D }t| |jj}|rt |}dd |D }|D ]}|d }|d r|d dd dkr|d7 }t| qnMdd |jD }||j t|} 
drI|D ]}|jtjkrF||j|j 7 }q5nt| |}|rYtt |}td fdd|D  t	d dS )z:Entry Point for completion of main and subcommand options.PIP_AUTO_COMPLETEN
COMP_WORDS   
COMP_CWORD help-)show	uninstallc                    s0   g | ]}|j r|j  d d vr|j qS )r   N)canonical_name
startswith).0dist)cwordslc /var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/lib/python3.10/site-packages/pip/_internal/cli/autocompletion.py
<listcomp>2   s    
z autocomplete.<locals>.<listcomp>T)
local_onlyinstallpathc                 S   s   g | ]	}| d d qS )=r   )splitr   xr   r   r   r   N       c                    s    g | ]\}}| vr||fqS r   r   )r   r$   v)	prev_optsr   r   r   O   s     c                    s"   g | ]\}}|  r||fqS r   r   )r   kr&   currentr   r   r   Q   s   " c                 S   s   g | ]}|d fqS )r   r   )r   r    r   r   r   r   \   s    r      z--r!   c                 S   s   g | ]}|j qS r   )option_list)r   ir   r   r   r   f   s     c                    s   g | ]	}|  r|qS r   r(   r#   r*   r   r   r   s   r%   ) osenvironr"   int
IndexErrorr   listr   sysexitr   r
   loweriter_installed_distributionsprintauto_complete_pathsr	   parseroption_list_allr   optparseSUPPRESS_HELP
_long_opts_short_optsappendnargsget_path_completion_typeoption_groupsr-   r   from_iterablejoin)cwordr;   subcommandsoptionssubcommand_namewordshould_list_installedenv	installedr   should_list_installablesr    
subcommandoptopt_strcompletion_typepathsoption	opt_labeloptsflattened_optsr   )r+   r   r   r'   r   autocomplete   s   








 
	
rY   r   rG   rW   c                 C   s   |dk s| |d   dsdS |D ]7}|jtjkrqt|dD ]&}| |d  dd |krG|jr@tdd |jdD rG|j    S q!qdS )	aL  Get the type of path completion (``file``, ``dir``, ``path`` or None)

    :param cwords: same as the environmental variable ``COMP_WORDS``
    :param cword: same as the environmental variable ``COMP_CWORD``
    :param opts: The available options to check
    :return: path completion type (``file``, ``dir``, ``path`` or None)
    r,   r   N/r!   r   c                 s   s    | ]}|d v V  qdS ))r    filedirNr   r#   r   r   r   	<genexpr>   s    
z+get_path_completion_type.<locals>.<genexpr>)r   r   r=   r>   strr"   metavarany)r   rG   rW   rQ   or   r   r   rC   w   s   

rC   r+   rS   c                 #   s    t j| \} t j|}t |t jsdS t j   fddt |D }|D ]0}t j||}t jt j||}|dkrNt j	|rN|V  q,t j
|r\t j|dV  q,dS )at  If ``completion_type`` is ``file`` or ``path``, list all regular files
    and directories starting with ``current``; otherwise only list directories
    starting with ``current``.

    :param current: The word to be completed
    :param completion_type: path completion type(``file``, ``path`` or ``dir``)
    :return: A generator of regular files and/or directories
    Nc                 3   s&    | ]}t j| r|V  qd S )N)r0   r    normcaser   r#   filenamer   r   r]      s    
z&auto_complete_paths.<locals>.<genexpr>r\   r   )r0   r    r"   abspathaccessR_OKrb   listdirrF   isfileisdir)r+   rS   	directorycurrent_path	file_listfrQ   	comp_filer   rc   r   r:      s$   	
r:   )r   N)__doc__r=   r0   r5   	itertoolsr   typingr   r   r   r   pip._internal.cli.main_parserr   pip._internal.commandsr   r	   pip._internal.metadatar
   rY   r^   r2   rC   r:   r   r   r   r   <module>   s(    
h
