o
    Vh(<                     @  s   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
 erJd d	lmZ d d
lmZ d dlmZ d dlmZ G dd dZdS )    )annotations)TYPE_CHECKING)ConflictCauseError)DependencyCauseError)NoVersionsCauseError)PlatformCauseError)PythonCauseError)RootCauseError)Callable)Iterator)IncompatibilityCauseError)Termc                   @  s   e Zd Zd1ddZed2d	d
Zed3ddZed4ddZd5ddZd6ddZ	d7ddZ
d8ddZd8dd Zd8d!d"Zd9d:d'd(Zd;d,d-Zd6d.d/Zd0S )<Incompatibilityterms
list[Term]causer   returnNonec                 C  s&  t |dkrt|trtdd |D rdd |D }t |dkrt |dks3|d jj|d jjkri }|D ]0}||jji }|jj}||v rc|| |}d	| d
}|d us^J ||||< q7|||< q7g }	| D ]}dd | D }
|
r|	|
7 }	qn|	t	| 7 }	qn|	}|| _
|| _d S )N   c                 s  s     | ]}|  o|jjV  qd S Nis_positive
dependencyis_root.0term r   s/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/poetry/mixology/incompatibility.py	<genexpr>   s    z+Incompatibility.__init__.<locals>.<genexpr>c                 S  s    g | ]}|  r|jjs|qS r   r   r   r   r   r   
<listcomp>   s    z,Incompatibility.__init__.<locals>.<listcomp>   r   z	Package 'z&' is listed as a dependency of itself.c                 S     g | ]}|  r|qS r   r   r   r   r   r   r    A   s
    )len
isinstancer   anyr   complete_name
setdefault	intersectvalueslist_terms_cause)selfr   r   by_namer   by_refrefvalueerr_msg	new_termspositive_termsr   r   r   __init__   sB   


zIncompatibility.__init__c                 C     | j S r   r-   r/   r   r   r   r   O      zIncompatibility.termsc                 C  r8   r   )r.   r:   r   r   r   r   S   r;   zIncompatibility.causeIterator[Incompatibility]c                 c  s>    t | jtr| j}|jjE dH  |jjE dH  dS | V  dS )zl
        Returns all external incompatibilities in this incompatibility's
        derivation graph.
        N)r&   r.   r   conflictexternal_incompatibilitiesother)r/   r   r   r   r   r>   W   s   
z*Incompatibility.external_incompatibilitiesboolc                 C  s*   t | jdkpt | jdko| jd jjS )Nr   r   )r%   r-   r   r   r:   r   r   r   
is_failureg   s   zIncompatibility.is_failurestrc                 C  s  t | jtr4t| jdksJ | jd }| jd }| sJ | r%J | j|dd d| | S t | jtrdt| jdksCJ | jd  sLJ | j| jd dd d}|d| jj 7 }|S t | jt	rt| jdkssJ | jd  s|J | j| jd dd d}|d	| jj
 7 }|S t | jtrt| jdksJ | jd  sJ d
| jd jj d| jd j S t | jtrt| jdksJ | jd  rJ | jd jjsJ | jd jj d| jd jj S |  rdS t| jdkr| jd }| r	dnd}|jj d| S t| jdkrg| jd }| jd }| | krg| sBd| | d| | S |j rL|jjn| |}|j r[|jjn| |}	| d|	 S g }
g }| jD ]}| r|
| | qn|| | qn|
r|rt|
dkrdd|
 dd| S tdd | jD }| j|dd dd| S |
rdd|
 dS dd| dS )Nr!   r   r   Tallow_every depends on 
 requires zPython z	platform zno versions of z match z is zversion solving failed	forbiddenrequiredzeither  or z is incompatible with if  and  then c                 s  s    | ]	}|  r|V  qd S r   r$   r   r   r   r   r      s    z*Incompatibility.__str__.<locals>.<genexpr>zone of z must be falsez must be true)r&   r.   r   r%   r-   r   _terser   python_versionr   platformr   r   name
constraintr	   r   rA   is_anyappendjoinnext)r/   dependerdependeetextr   verbterm1term2package1package2positivenegativepositive_termr   r   r   __str__l   s   








zIncompatibility.__str__r?   	this_line
int | None
other_linec                 C  s   |  |||}|d ur|S | |||}|d ur|S | |||}|d ur'|S t| g}|d ur8|d| |d| |d urL|d| d|S )N rK   
)_try_requires_both_try_requires_through_try_requires_forbiddenrB   rS   rT   )r/   r?   rb   rd   requires_bothrequires_throughrequires_forbiddenbufferr   r   r   and_to_string   s    

zIncompatibility.and_to_string
str | Nonec           
        s<  t  jdkst |jdkrd S  dd }|d u rd S |dd }|d u r*d S |j|jkr2d S d fdd jD }d fdd|jD } j|d	d
d g}t jt	oat|jt	}	|	rj|
d n|
d |
d|  |d ur|
d| d |
d|  |d ur|
d| d d|S )Nr   c                 S     |   S r   r$   r   r   r   r   <lambda>       z4Incompatibility._try_requires_both.<locals>.<lambda>c                 S  rp   r   r$   rq   r   r   r   rr      rs   rI   c                      g | ]}|  s |qS r   r   rM   r   r:   r   r   r           z6Incompatibility._try_requires_both.<locals>.<listcomp>c                   rt   r   ru   r   r:   r   r   r      rv   TrC   re   
depends onrequiresz both  ()rK    )r%   r-   r   _single_term_wherer   rT   rM   r&   r   r   rS   )
r/   r?   rb   rd   this_positiveother_positivethis_negativesother_negativesrm   is_dependencyr   r:   r   rg      s<   

z"Incompatibility._try_requires_bothc                   s  t  jdkst |jdkrd S  dd }|dd }|d u r(|d u r(d S  dd } dd }|d urW|d urW|jj|jjkrW|j|rW }|}	|}
|}|}n#|d urx|d urx|jj|jjkrx|j|rx|}|}	|}
 }|}nd S dd |jD }g }t |dkrd	 fd
d|D }|	d| d nt
|jtrd}nd}|	 j|d dd d| d |	 |	 |
d ur|	d|
 d |	d t
|jtr|	d n|	d |	d	 fdd|jD  |d ur|	d| d d|S )Nr   c                 S  
   |    S r   r$   rq   r   r   r   rr   %     
 z7Incompatibility._try_requires_through.<locals>.<lambda>c                 S  r   r   r$   rq   r   r   r   rr   &  r   c                 S  rp   r   r$   rq   r   r   r   rr   +  rs   c                 S  rp   r   r$   rq   r   r   r   rr   ,  rs   c                 S  r#   r   r$   r   r   r   r   r    G      z9Incompatibility._try_requires_through.<locals>.<listcomp>rI   c                      g | ]}  |qS r   rM   r   r:   r   r   r    K      rJ   rL   rw   rx   r   TrC   re   ry   rz   z which zdepends on z	requires c                   rt   r   ru   r   r:   r   r   r    d  rv   r{   )r%   r-   r   r|   r   rP   inverse	satisfiesrT   rS   r&   r   r   rM   )r/   r?   rb   rd   this_negativeother_negativer}   r~   priorprior_negative
prior_linelatterlatter_lineprior_positivesrm   prior_stringrY   r   r:   r   rh     sn   





z%Incompatibility._try_requires_throughc                   s  t  jdkrt |jdkrd S t  jdkr |} }|}|}n }|}|}|}|dd }|d u r5d S |j|jd s@d S dd |jD }	g }
t |	dkrfd fdd|	D }|
d	| d
 n|
 j|	d dd t	|j
tr~|
d n|
d |
 |jd d  |d ur|
d| d t	|j
tr|j
}|
d|j  nt	|j
tr|
d n|
d |d ur|
d| d d|
S )Nr   c                 S  r   r   r$   rq   r   r   r   rr     r   z9Incompatibility._try_requires_forbidden.<locals>.<lambda>r   c                 S  r#   r   r$   )r   tr   r   r   r      r   z;Incompatibility._try_requires_forbidden.<locals>.<listcomp>rI   c                   r   r   r   r   r:   r   r   r      r   rJ   rL   TrC   rE   rF   re   (z) zwhich requires Python z which doesn't match any versionszwhich is forbiddenry   rz   r{   )r%   r-   r   r|   r   r   rT   rS   rM   r&   r   r   r   rN   r   )r/   r?   rb   rd   r   r   r   r   r_   	positivesrm   r   r   r   r:   r   ri   m  sJ   


z'Incompatibility._try_requires_forbiddenFr   r   rD   c                 C  s^   |r|j  rd|jj S |jjr|jj}|S |jjr!t|jS |jj}| d|jj	 dS )Nzevery version of ry   rz   )
rQ   rR   r   r(   r   pretty_namesource_typerB   complete_pretty_namepretty_constraint)r/   r   rD   r   r   r   r   rM     s   
zIncompatibility._tersecallableCallable[[Term], bool]Term | Nonec                 C  s0   d }| j D ]}||sq|d ur d S |}q|S r   r9   )r/   r   foundr   r   r   r   r|     s   
z"Incompatibility._single_term_wherec                 C  s   d| dS )Nz<Incompatibility >r   r:   r   r   r   __repr__  s   zIncompatibility.__repr__N)r   r   r   r   r   r   )r   r   )r   r   )r   r<   )r   r@   )r   rB   )r?   r   rb   rc   rd   rc   r   rB   )r?   r   rb   rc   rd   rc   r   ro   )F)r   r   rD   r@   r   rB   )r   r   r   r   )__name__
__module____qualname__r7   propertyr   r   r>   rA   ra   rn   rg   rh   ri   rM   r|   r   r   r   r   r   r      s"    
9


b

1
Q9
r   N)
__future__r   typingr   %poetry.mixology.incompatibility_causer   r   r   r   r   r	   collections.abcr
   r   r   poetry.mixology.termr   r   r   r   r   r   <module>   s    