
     h2                        d Z ddl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 ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ ddlmZ ddlm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+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3  ej4        e5          Z6e3j7        e3j8        e3j9        gZ:dedefdZ; G d de          Z<dS )zContains the RequirementCommand base class.

This class is in a separate module so the commands that do not always
need PackageFinder capability don't unnecessarily import the
PackageFinder machinery and all its vendored dependencies, etc.
    N)partial)Values)AnyListOptionalTuple)
WheelCache)
cmdoptions)IndexGroupCommand)SessionCommandMixin)CommandErrorPreviousBuildDirError)LinkCollector)PackageFinder)SelectionPreferences)TargetPython)
PipSession)BuildTracker)RequirementPreparer)install_req_from_editableinstall_req_from_line#install_req_from_parsed_requirementinstall_req_from_req_string)parse_dependency_groups)parse_requirements)InstallRequirement)BaseResolver)TempDirectoryTempDirectoryTypeRegistrytempdir_kindsfuncreturnc           	           dt           ddfddt          dt          dt          t                   dt
          t                   f fd}|S )	zNDecorator for common logic related to managing temporary
    directories.
    registryr"   Nc                 F    t           D ]}|                     |d           d S )NF)KEEPABLE_TEMPDIR_TYPES
set_delete)r$   ts     \/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/pip/_internal/cli/req_command.pyconfigure_tempdir_registryz0with_cleanup.<locals>.configure_tempdir_registry8   s4    ' 	* 	*A5))))	* 	*    selfoptionsargsc                     | j         J |j        r | j                    	  | ||          S # t          $ r  | j                     w xY wN)tempdir_registryno_cleanr   )r,   r-   r.   r*   r!   s      r)   wrapperzwith_cleanup.<locals>.wrapper<   s     $000 	>&&t'<===	4gt,,,$ 	 	 	 '&t'<===	s	   0 A)r   RequirementCommandr   r   r   r   int)r!   r3   r*   s   ` @r)   with_cleanupr6   3   sy    
*-F *4 * * * * +19=c	#        Nr+   c                       e Zd Zdededdf fdZededefd            Ze		 	 d"d	e
ded
ededededee         dedefd            Ze		 	 	 	 	 	 	 	 d#dedededee         dedededededee         deeedf                  defd            Zdee         dedededee         f
dZededdfd            Z	 	 d$deded ee         dee         def
d!Z xZS )%r4   r.   kwr"   Nc                      t                      j        |i | | j                            t	          j                               | j                            t	          j                               d S r0   )super__init__cmd_opts
add_optionr
   dependency_groupsr2   )r,   r.   r8   	__class__s      r)   r;   zRequirementCommand.__init__P   sc    $%"%%%  !=!?!?@@@  !4!6!677777r+   r-   c                     d| j         v rdS dS )zEDetermines which resolver should be used, based on the given options.zlegacy-resolverlegacy
resolvelib)deprecated_features_enabledr-   s    r)   determine_resolver_variantz-RequirementCommand.determine_resolver_variantV   s      CCC8|r+   r   temp_build_dirbuild_trackersessionfinderuse_user_sitedownload_dir	verbosityc	                 d   |j         }	|	J d}
|                     |          }|dk    r&d|j        v }|rt                              d           n'd}
d}d|j        v rt                              d           t          |	|j        ||j        |j        |||j	        ||j
        ||||
|j                  S )	zQ
        Create a RequirementPreparer instance for the given parameters.
        NFrB   z	fast-depszpip is using lazily downloaded wheels using HTTP range requests to obtain dependency information. This experimental feature is enabled through --use-feature=fast-deps and it is not ready for production.Tz;fast-deps has no effect when used with the legacy resolver.)	build_dirsrc_dirrK   build_isolationcheck_build_depsrG   rH   progress_barrI   require_hashesrJ   
lazy_wheelrL   legacy_resolverresume_retries)pathrE   features_enabledloggerwarningr   rO   rP   rQ   rR   rS   rV   )clsrF   r-   rG   rH   rI   rJ   rK   rL   temp_build_dir_pathrU   resolver_variantrT   s                r)   make_requirement_preparerz,RequirementCommand.make_requirement_preparer^   s     -1"...99'BB|++$(@@J "   #OJg666Q   #)O%#3$5' -"1'!+"1
 
 
 	
r+   FTto-satisfy-onlypreparerwheel_cacheignore_installedignore_requires_pythonforce_reinstallupgrade_strategy
use_pep517py_version_info.c                 d   t          t          |j        |
          }|                     |          }|dk    r=ddl}|j        j        j        j        	                    ||||||j
        ||||	|          S ddl}|j        j        j        j        	                    ||||||j
        ||||	|          S )zF
        Create a Resolver instance for the given parameters.
        )isolatedrf   rB   r   N)r`   rI   ra   make_install_reqrJ   ignore_dependenciesrb   rc   rd   re   rg   )r   r   isolated_moderE   ,pip._internal.resolution.resolvelib.resolver	_internal
resolutionrB   resolverResolverrk   (pip._internal.resolution.legacy.resolverrA   )r[   r`   rI   r-   ra   rJ   rb   rc   rd   re   rf   rg   rj   r]   pips                  r)   make_resolverz RequirementCommand.make_resolver   s    $ #'*!
 
 

 99'BB |++????=+6?HH!'!1+$+$?!1'= /!1 / I    	8777}'.7@@#-' ' ;-#9+-+ A 
 
 	
r+   c                    g }|j         D ]E}t          |d|||          D ].}t          ||j        d          }|                    |           /F|D ]E}	t          |	d|j        |j        dt          |dd                    }|                    |           F|j        rIt          |j                  D ]4}	t          |	|j        |j        d          }|                    |           5|j        D ]D}	t          |	d|j        |j        t          |dd          	          }|                    |           E|j        D ]l}t          ||||
          D ]V}t          ||j        |j        d|j        r|j                            d          nd          }|                    |           Wmt!          d |D                       rd|_        |s|j        sy|j        sr|j        skd| j        i}
|j        rAt)           dj        di t-          |
d                    |j                                      t)           dj        di |
          |S )zS
        Parse command-line arguments into the corresponding requirements.
        T)
constraintrI   r-   rH   F)ri   user_suppliedNconfig_settings)
comes_fromri   rf   rw   rx   )ri   rf   rw   )rw   ri   rf   rx   )rI   r-   rH   )ri   rf   rw   rx   c              3   $   K   | ]}|j         V  d S r0   )has_hash_options).0reqs     r)   	<genexpr>z6RequirementCommand.get_requirements.<locals>.<genexpr>  s%      <<s#<<<<<<r+   namezXYou must give at least one requirement to {name} (maybe you meant "pip {name} {links}"?) )linkszHYou must give at least one requirement to {name} (see "pip help {name}") )constraintsr   r   rl   appendr   rf   getattrr>   r   r   	editablesr   requirementsr-   getanyrS   r   
find_linksr   formatdictjoin)r,   r.   r-   rI   rH   r   filename
parsed_req
req_to_addr}   optss              r)   get_requirementsz#RequirementCommand.get_requirements   s^    24+ 	0 	0H0   0 0
 A$2"'  

 ##J////0  		, 		,C. ."-" '1BD I I  J 
++++$ 	0.w/HII 0 08$2&1"&	  
 ##J////$ 	, 	,C2" ."- '1BD I I  J 
++++  , 	0 	0H0'   0 0
 A$2&1"& &-"
*../@AAA!
 
 

 ##J////0" <<|<<<<< 	*%)G" 	 	 #	 (		 DI&D! "E >>D t388G4F+G+GHHH    #5 ..4= =7;= =  
 r+   c                 x    | j         }|                                }|rt                              |           dS dS )zE
        Trace basic information about the provided objects.
        N)search_scopeget_formatted_locationsrY   info)rI   r   	locationss      r)   trace_basic_infoz#RequirementCommand.trace_basic_info6  sG     * 88::	 	#KK	"""""	# 	#r+   target_pythonc                     t          j        ||          }t          d|j        |j        |j        |          }t          j        |||          S )z
        Create a package finder appropriate to this requirement command.

        :param ignore_requires_python: Whether to ignore incompatible
            "Requires-Python" values in links. Defaults to False.
        rD   T)allow_yankedformat_controlallow_all_prereleasesprefer_binaryrc   )link_collectorselection_prefsr   )r   creater   r   prer   r   )r,   r-   rH   r   rc   r   r   s          r)   _build_package_finderz(RequirementCommand._build_package_finderA  si     '-gwGGG."1")+!/#9
 
 
 #)+'
 
 
 	
r+   )Nr   )NFTFFr_   NN)NN)__name__
__module____qualname__r   r;   staticmethodr   strrE   classmethodr   r   r   r   boolr   r5   r   r^   r	   r   r   rt   r   r   r   r   r   r   __classcell__)r?   s   @r)   r4   r4   O   s       8c 8 8 8 8 8 8 8 8 F s    \  '+5
 5
%5
 5
 $	5

 5
 5
 5
 sm5
 5
 
5
 5
 5
 [5
n  -1#!%', % 1%)598
 8
%8
 8
 	8

 j)8
 8
 8
 !%8
 8
 8
 TN8
 "%S/28
 
8
 8
 8
 [8
tc3ic c 	c
 c 
 	!c c c cJ # #4 # # # \# 1515
 

 
  -	

 !)
 

 
 
 
 
 
 
 
r+   r4   )=__doc__logging	functoolsr   optparser   typingr   r   r   r   pip._internal.cacher	   pip._internal.clir
   pip._internal.cli.index_commandr   r   pip._internal.exceptionsr   r   pip._internal.index.collectorr   "pip._internal.index.package_finderr   $pip._internal.models.selection_prefsr   "pip._internal.models.target_pythonr   pip._internal.network.sessionr   ,pip._internal.operations.build.build_trackerr    pip._internal.operations.preparer   pip._internal.req.constructorsr   r   r   r   &pip._internal.req.req_dependency_groupr   pip._internal.req.req_filer   pip._internal.req.req_installr   pip._internal.resolution.baser   pip._internal.utils.temp_dirr   r   r    	getLoggerr   rY   	BUILD_ENVEPHEM_WHEEL_CACHE	REQ_BUILDr&   r6   r4   r   r+   r)   <module>r      s                 - - - - - - - - - - - - * * * * * * ( ( ( ( ( ( = = = = = = V V V V V V H H H H H H H H 7 7 7 7 7 7 < < < < < < E E E E E E ; ; ; ; ; ; 4 4 4 4 4 4 E E E E E E @ @ @ @ @ @            K J J J J J 9 9 9 9 9 9 < < < < < < 6 6 6 6 6 6          
	8	$	$ # s s    8L
 L
 L
 L
 L
* L
 L
 L
 L
 L
r+   