
    dh                       d Z ddlmZ ddl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mZ dd	lmZ dd
lmZ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!  ejD                  e#      Z$ G d de      Z%e&ee%f   Z'e(eef   Z)e(eeef   Z*e&ee+e)   f   Z,e&ee+e*   f   Z-e(e,e-f   Z.e(e'e.f   Z/ddZ0	 d	 	 	 	 	 ddZ1ddZ2	 	 	 	 	 	 ddZ3	 	 	 	 	 	 ddZ4	 	 	 	 	 	 ddZ5y) z&Validation of dependencies of packages    )annotationsN)	GeneratorIterable)suppress)Parser)reduce)Callable
NamedTuple)Requirement)Tag	parse_tag)NormalizedNamecanonicalize_name)Version))make_distribution_for_install_requirement)get_default_environment)BaseDistribution)InstallRequirementc                  "    e Zd ZU ded<   ded<   y)PackageDetailsr   versionzlist[Requirement]dependenciesN)__name__
__module____qualname____annotations__     `/var/www/html/vivango/api/ia/venv/lib/python3.12/site-packages/pip/_internal/operations/check.pyr   r      s    ##r   r   c                 >   i } d}t               }|j                  dd      D ]A  }|j                  }	 t        |j	                               }t        |j                  |      | |<   C | |fS # t        t        f$ r#}t        j                  d||       d}Y d}~ud}~ww xY w)z3Converts a list of distributions into a PackageSet.Fr   )
local_onlyskipz$Error parsing dependencies of %s: %sTN)r   iter_installed_distributionscanonical_namelistiter_dependenciesr   r   OSError
ValueErrorloggerwarning)package_setproblemsenvdistnamer   es          r   !create_package_set_from_installedr1   ,   s    KH
!
#C00E0K ""	 6 6 89L .t||\ JK	   	 $ 	NNA4KH	s   2A**B9BBc                2   i }i }| j                         D ]  \  }}t               }t               }|r	 ||      r%|j                  D ]  }t        |j                        }	|	| vrAd}
|j
                  |j
                  j                  ddi      }
|
r|j                  |	|f       ]| |	   j                  }|j                  j                  |d      r|j                  |	||f        |rt        |t              ||<   |st        |t              ||<    ||fS )zCheck if a package set is consistent

    If should_ignore is passed, it should be a callable that takes a
    package name and returns a boolean.
    Textra )prereleases)key)itemssetr   r   r/   markerevaluateaddr   	specifiercontainssortedstr)r+   should_ignoremissingconflictingpackage_namepackage_detailmissing_depsconflicting_depsreqr/   missedr   s               r   check_package_setrI   =   s+    GK(3(9(9(; J$n%(U-0U]<8!.. 	;C$SXX.D ;&::) ZZ00'2?F $$dC[1 "$'//G==))'t)D $$dGS%9:	;" $*<S$AGL!(./?S(IK%9J< Kr   c                r    t               \  }}t        | |      }t        ||      |t        |fd      fS )zeFor checking if the dependency graph would be consistent after     installing given requirements
    c                    | vS Nr   )r/   	whitelists    r   <lambda>z)check_install_conflicts.<locals>.<lambda>y   s    D	4I r   )r@   )r1   _simulate_installation_of_create_whitelistrI   )
to_installr+   _would_be_installedrM   s       @r   check_install_conflictsrT   j   sJ    
 78NK2:{K ""4kBI 	'I	
 r   c              #  ^  K   | D ]  }t        t              5  |j                  d      }t        t        j
                  t        t        t               j                  |      j                  dg             t	                     }|j                  |      r| d d d         y # 1 sw Y   xY ww)NWHEELr   )r   FileNotFoundError	read_textr   	frozensetunionmapr   r   parsestrget_all
isdisjoint)packagessupported_tagsp
wheel_file
wheel_tagss        r   check_unsupportedrd   ~   s       	'( 	W-J)/Ivx00<DDUBOP*J
 $$^4	 			 	s   B-A?B!B-!B*	&B-c                    t               }| D ]j  }t        |      }|j                         }|j                  }t	        |j
                  t        |j                                     ||<   |j                  |       l |S )z=Computes the version of packages after installing to_install.)	r8   r   get_metadata_distributionr$   r   r   r%   r&   r;   )rQ   r+   	installedinst_reqabstract_distr.   r/   s          r   rO   rO      sv    
 I  A(K668""*4<<d>T>T>V9WXDd r   c                    t        |       }|D ]E  }||v r||   j                  D ],  }t        |j                        |v s|j	                  |        E G |S rL   )r8   r   r   r/   r;   )rS   r+   packages_affectedrC   rG   s        r   rP   rP      sp     ./# ,,|,99 	C *.??!%%l3		 r   )returnztuple[PackageSet, bool]rL   )r+   
PackageSetr@   zCallable[[str], bool] | Nonerl   CheckResult)rQ   list[InstallRequirement]rl   ConflictDetails)r_   zIterable[BaseDistribution]r`   zIterable[Tag]rl   z'Generator[BaseDistribution, None, None])rQ   ro   r+   rm   rl   set[NormalizedName])rS   rq   r+   rm   rl   rq   )6__doc__
__future__r   loggingcollections.abcr   r   
contextlibr   email.parserr   	functoolsr   typingr	   r
   "pip._vendor.packaging.requirementsr   pip._vendor.packaging.tagsr   r   pip._vendor.packaging.utilsr   r   pip._vendor.packaging.versionr   pip._internal.distributionsr   pip._internal.metadatar   pip._internal.metadata.baser   pip._internal.req.req_installr   	getLoggerr   r)   r   dictrm   tupleMissingConflictingr%   MissingDictConflictingDictrn   rp   r1   rI   rT   rd   rO   rP   r   r   r   <module>r      sU   , "  /   
 ; 5 I 1 Q : 8 <			8	$$Z $ ..01

+
,NG[89>4=01~tK'889K01
K/0!$ LP* * ,H* * Z((! - (7A&+:Dr   