
    dh3                       d Z ddlm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 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/m0Z0 ddl1m2Z2m3Z3m4Z4  ejj                  e6      Z7e4jp                  e4jr                  e4jt                  gZ;ddZ< G d de      Z=y)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.
    )annotationsN)partial)Values)Any)#SubprocessBuildEnvironmentInstaller)
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_kindsc                0     dd	 	 	 	 	 	 	 	 d fd}|S )zNDecorator for common logic related to managing temporary
    directories.
    c                >    t         D ]  }| j                  |d        y )NF)KEEPABLE_TEMPDIR_TYPES
set_delete)registryts     _/var/www/html/vivango/api/ia/venv/lib/python3.12/site-packages/pip/_internal/cli/req_command.pyconfigure_tempdir_registryz0with_cleanup.<locals>.configure_tempdir_registry;   s!    ' 	*A5)	*    c                    | j                   J |j                  r | j                          	  | ||      S # t        $ r  | j                           w xY wN)tempdir_registryno_cleanr   )selfoptionsargsr'   funcs      r&   wrapperzwith_cleanup.<locals>.wrapper?   sd     $$000&t'<'<=	gt,,$ 	 't'<'<=	s	   	9 A)r$   r   returnNone)r-   RequirementCommandr.   r   r/   z	list[Any]r2   z
int | None )r0   r1   r'   s   ` @r&   with_cleanupr6   6   s4    
* +19B	  Nr(   c                      e Zd Zd fdZed	d       Ze	 	 d
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Z	 	 	 	 	 	 	 	 	 	 ddZ	edd       Z
	 	 d	 	 	 	 	 	 	 	 	 ddZ xZS )r4   c                    t        |   |i | | j                  j                  t	        j
                                | j                  j                  t	        j                                y r*   )super__init__cmd_opts
add_optionr	   dependency_groupsr,   )r-   r/   kw	__class__s      r&   r:   zRequirementCommand.__init__S   sK    $%"%  !=!=!?@  !4!4!67r(   c                "    d| j                   v ryy)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_variantY   s      C CCr(   c	                   |j                   }	|	J d}
| j                  |      }|dk(  r&d|j                  v }|r=t        j	                  d       n'd}
d}d|j                  v rt        j	                  d       t        di d|	d|j                  d	|d
|j                  dt        |      d|j                  d|d|d|j                  d|d|j                  d|d|d|d|
d|j                  S )zQ
        Create a RequirementPreparer instance for the given parameters.
        FrB   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_dirdownload_dirbuild_isolationbuild_isolation_installercheck_build_depsbuild_trackersessionprogress_barfinderrequire_hashesuse_user_site
lazy_wheel	verbositylegacy_resolverresume_retriesr5   )pathrE   features_enabledloggerwarningr   rH   rJ   r   rL   rO   rQ   rV   )clstemp_build_dirr.   rM   rN   rP   rR   rI   rT   temp_build_dir_pathrU   resolver_variantrS   s                r&   make_requirement_preparerz,RequirementCommand.make_requirement_preparera   sZ    -11"...99'B|+$(@(@@J" #OJg666Q # 
)
OO
 &
 $33	

 'J&&Q
 %55
 (
 
 !--
 
 #11
 (
 "
  
 ,
  #11!
 	
r(   c                   t        t        |j                  |
      }| j                  |      }|dk(  rRddl}|j
                  j                  j                  j                  j                  ||||||j                  ||||	|      S ddl}|j
                  j                  j                  j                  j                  ||||||j                  ||||	|      S )zF
        Create a Resolver instance for the given parameters.
        )isolated
use_pep517rB   r   N)preparerrP   wheel_cachemake_install_reqrR   ignore_dependenciesignore_installedignore_requires_pythonforce_reinstallupgrade_strategypy_version_info)r   r   isolated_moderE   ,pip._internal.resolution.resolvelib.resolver	_internal
resolutionrB   resolverResolverrf   (pip._internal.resolution.legacy.resolverrA   )r[   rc   rP   r.   rd   rR   rg   rh   ri   rj   rb   rk   re   r^   pips                  r&   make_resolverz RequirementCommand.make_resolver   s    $ #'**!

 99'B |+?==++66??HH!'!1+$+$?$?!1'= /!1 / I   	8}}''..77@@#-' ' ; ;-#9+-+ A 
 	
r(   c                   g }|j                   D ]@  }t        |d|||      D ]+  }t        ||j                  d      }|j	                  |       - B |D ]C  }	t        |	d|j                  |j                  dt        |dd            }|j	                  |       E |j                  rNt        |j                        D ]6  }	t        |	|j                  |j                  d      }|j	                  |       8 |j                  D ]B  }	t        |	d|j                  |j                  t        |dd      	      }|j	                  |       D |j                  D ]r  }t        ||||
      D ]^  }t        ||j                  |j                  d|j                  r|j                  j                  d      nd      }|j	                  |       ` t t!        d |D              rd|_        |s|j                  s|j                  s|j                  std| j$                  i}
|j&                  r?t)         dj*                  di t-        |
dj/                  |j&                                    t)         dj*                  di |
      |S )zS
        Parse command-line arguments into the corresponding requirements.
        T)
constraintrP   r.   rN   F)ra   user_suppliedNconfig_settings)
comes_fromra   rb   rw   rx   )ra   rb   rw   )rw   ra   rb   rx   )rP   r.   rN   )ra   rb   rw   rx   c              3  4   K   | ]  }|j                     y wr*   )has_hash_options).0reqs     r&   	<genexpr>z6RequirementCommand.get_requirements.<locals>.<genexpr>!  s     <s##<s   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}")r5   )constraintsr   r   rl   appendr   rb   getattrr=   r   r   	editablesr   requirementsr.   getanyrQ   r   
find_linksr   formatdictjoin)r-   r/   r.   rP   rN   r   filename
parsed_req
req_to_addr}   optss              r&   get_requirementsz#RequirementCommand.get_requirements   s    24++ 	0H0 0
 A$22"'

 ##J/0	0  		,C. .."--" '1BD IJ 
+		, $$.w/H/HI 08$22&11"&	
 ##J/0 $$ 	,C2" .."-- '1BD IJ 
+	,  ,, 	0H0' 0
 A$22&11"& &-- #**../@A!

 ##J/0	0$ <|<<%)G"   ##((DII&D!!"E >>Dft388G4F4F+GH  #5 ..4f=7;= 
 r(   c                l    | j                   }|j                         }|rt        j                  |       yy)zE
        Trace basic information about the provided objects.
        N)search_scopeget_formatted_locationsrY   info)rP   r   	locationss      r&   trace_basic_infoz#RequirementCommand.trace_basic_info:  s1     ** 88:	KK	" r(   c                    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_binaryrh   )link_collectorselection_prefstarget_python)r   creater   r   prer   r   )r-   r.   rN   r   rh   r   r   s          r&   _build_package_finderz(RequirementCommand._build_package_finderE  s]     '--gwG."11")++!//#9
 ##)+'
 	
r(   )r/   r   r>   r   r2   r3   )r.   r   r2   str)Nr   )r\   r   r.   r   rM   r   rN   r   rP   r   rR   boolrI   z
str | NonerT   intr2   r   )NFTFFzto-satisfy-onlyNN)rc   r   rP   r   r.   r   rd   zWheelCache | NonerR   r   rg   r   rh   r   ri   r   rj   r   rb   bool | Nonerk   ztuple[int, ...] | Noner2   r   )
r/   z	list[str]r.   r   rP   r   rN   r   r2   zlist[InstallRequirement])rP   r   r2   r3   )NN)
r.   r   rN   r   r   zTargetPython | Nonerh   r   r2   r   )__name__
__module____qualname__r:   staticmethodrE   classmethodr_   rt   r   r   r   __classcell__)r?   s   @r&   r4   r4   R   s   8    $(6
%6
 6
 $	6

 6
 6
 6
 !6
 6
 
6
 6
p  *.#!%', % 1"&268
%8
 8
 	8

 '8
 8
 8
 !%8
 8
 8
  8
 08
 
8
 8
tcc c 	c
 c 
"cJ # # .2.2

 
 +	

 !,
 

r(   r4   )r0   r   r2   r   )>__doc__
__future__r   logging	functoolsr   optparser   typingr   pip._internal.build_envr   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   r5   r(   r&   <module>r      s    #     G * ( = V H 7 < E ; 4 E @  K 9 < 6  
		8	$ ## 8M
* M
r(   