o
    bb                     @   s   d dl Z d dl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mZ d	ed
ejfddZeee
ejd	efddZee jeZG dd dZdddZdd Zdd ZdddZG dd deZdd Zdd Z dS )     N)Requirement)Version)always_iterable)suppress)apply   )metadatarepair_extrasreqreturnc                 C   s<   t | j}| jjt|jddst t| | j	|_	|S )aG  
    Resolve the requirement to its distribution.

    Ignore exception detail for Python 3.9 compatibility.

    >>> resolve(Requirement('pytest<3'))  # doctest: +IGNORE_EXCEPTION_DETAIL
    Traceback (most recent call last):
    ...
    importlib.metadata.PackageNotFoundError: No package metadata was found for pytest<3
    T)prereleases)
r   distributionname	specifiercontainsr   versionPackageNotFoundErrorstrextrasr
   dist r   |/home/ych/rk3568/buildroot/output/rockchip_rk3568/build/host-python-setuptools-62.6.0/setuptools/_vendor/nspektr/__init__.pyresolve   s
   r   c                 C   s   t | S N)r   )r
   r   r   r   is_satisfied    s   r   c                   @   s&   e Zd ZedefddZdd ZdS )
NullMarkerr
   c                 C   s   |j p|  S r   )marker)clsr
   r   r   r   wrap*   s   zNullMarker.wrapc                 O   s   dS )NTr   )selfargskwargsr   r   r   evaluate.   s   zNullMarker.evaluateN)__name__
__module____qualname__classmethodr   r   r#   r   r   r   r   r   )   s    r   c                    sF   dd t tt jD } fddt tt jD }t||S )z6
    Find direct, declared dependencies for dist.
    c                 s   s*    | ]}t |td dr|V  qd S )Nextra)r   r   r#   dict).0r
   r   r   r   	<genexpr>6   s    
z+find_direct_dependencies.<locals>.<genexpr>c                 3   s@    | ]}t t d D ]}t|t|dr|V  qqdS )r   r(   N)r   getattrr   r   r#   r*   )r+   r
   r)   r   r   r   r   r,   ;   s    )mapr   r   requires	itertoolschain)r   r   simpleZ
extra_depsr   r.   r   find_direct_dependencies2   s   r4   c                 c   s>    	 zt | }W n
 ty   Y dS w |V  t| ||} q)z
    Given an iterable of items, traverse the items.

    For each item, visit is called to return any additional items
    to include in the traversal.
    TN)nextStopIterationr1   r2   )itemsvisititemr   r   r   traverseD   s   r:   c                 c   sJ    t tj t| }t|E d H  W d    d S 1 sw   Y  d S r   )
contextlibr   r   r   r   r4   r   r   r   r   find_req_dependenciesT   s
   "r<   c                 C   s   t  fdd}tt| ||S )a  
    Find all reachable dependencies for dist.

    dist is an importlib.metadata.Distribution (or similar).
    TODO: create a suitable protocol for type hint.

    >>> deps = find_dependencies(resolve(Requirement('nspektr')))
    >>> all(isinstance(dep, Requirement) for dep in deps)
    True
    >>> not any('pytest' in str(dep) for dep in deps)
    True
    >>> test_deps = find_dependencies(resolve(Requirement('nspektr[testing]')))
    >>> any('pytest' in str(dep) for dep in test_deps)
    True
    c                 S   s   | |v rdS | |  t| S )Nr   )addr<   )r
   seenr   r   r   r8   k   s   
z find_dependencies.<locals>.visit)setr:   r4   )r   r   r8   r   r   r   find_dependenciesZ   s   r@   c                   @   s   e Zd Zdd ZdS )
Unresolvedc                 C   s   t | jd S )Nr   )iterr!   )r    r   r   r   __iter__u   s   zUnresolved.__iter__N)r$   r%   r&   rC   r   r   r   r   rA   t   s    rA   c                 C   s   t t| jt| jS )z>
    Generate the unresolved dependencies (if any) of ep.
    )unsatisfiedr@   r   r	   r   )epr   r   r   missingy   s   rF   c                 C   s   t t| }|rt|dS )a  
    >>> ep, = metadata.entry_points(group='console_scripts', name='pip')
    >>> check(ep)
    >>> dist = metadata.distribution('nspektr')

    Since 'docs' extras are not installed, requesting them should fail.

    >>> ep = metadata.EntryPoint(
    ...     group=None, name=None, value='nspektr [docs]')._for(dist)
    >>> check(ep)
    Traceback (most recent call last):
    ...
    nspektr.Unresolved: [...]
    N)listrF   rA   )rE   Zmissedr   r   r   check   s   rH   r   )!r1   	functoolsr;   Z(setuptools.extern.packaging.requirementsr   Z#setuptools.extern.packaging.versionr    setuptools.extern.more_itertoolsr   Z setuptools.extern.jaraco.contextr   Z"setuptools.extern.jaraco.functoolsr   Z_compatr   r	   Distributionr   boolr   r   partialfilterfalserD   r   r4   r:   r<   r@   	ExceptionrA   rF   rH   r   r   r   r   <module>   s,    
	
