o
    Vh                     @  sv   d dl mZ d dlmZ d dlmZ d dlmZ er2d 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)
Assignment)SetRelation)
Dependency)Package)Incompatibility)Termc                   @  s   e Zd ZdZd0ddZed1ddZed2d
dZed2ddZed3ddZ	d4ddZ
d5ddZd6dd Zd7d"d#Zd6d$d%Zd8d(d)Zd9d*d+Zd:d-d.Zd/S );PartialSolutiona'  
    # A list of Assignments that represent the solver's current best guess about
    # what's true for the eventual set of package versions that will comprise the
    # total solution.
    #
    # See:
    # https://github.com/dart-lang/mixology/tree/master/doc/solver.md#partial-solution.
    returnNonec                 C  s(   g | _ i | _i | _i | _d| _d| _d S )N   F)_assignments
_decisions	_positive	_negative_attempted_solutions_backtrackingself r   t/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/poetry/mixology/partial_solution.py__init__   s   
zPartialSolution.__init__list[Package]c                 C  s   t | j S N)listr   valuesr   r   r   r   	decisions7   s   zPartialSolution.decisionsintc                 C  s
   t | jS r   )lenr   r   r   r   r   decision_level;   s   
zPartialSolution.decision_levelc                 C  s   | j S r   )r   r   r   r   r   attempted_solutions?   s   z#PartialSolution.attempted_solutionslist[Dependency]c                   s    fdd j  D S )Nc                   s    g | ]}|j j jvr|j qS r   )
dependencycomplete_namer   ).0termr   r   r   
<listcomp>E   s
    z/PartialSolution.unsatisfied.<locals>.<listcomp>)r   r   r   r   r   r   unsatisfiedC   s   
zPartialSolution.unsatisfiedpackager   c                 C  sF   | j r
|  jd7  _d| _ || j|j< | t|| jt| j	 dS )zh
        Adds an assignment of package as a decision
        and increments the decision level.
        r   FN)
r   r   r   r$   _assignr   decisionr    r   r   )r   r)   r   r   r   decideK   s   	zPartialSolution.decider#   r   is_positiveboolcauser   c              
   C  s$   |  t|||| jt| j dS )z@
        Adds an assignment of package as a derivation.
        N)r*   r   
derivationr    r   r   )r   r#   r-   r/   r   r   r   derive^   s   zPartialSolution.derive
assignmentr   c                 C  s   | j | | | dS )zP
        Adds an Assignment to _assignments and _positive or _negative.
        N)r   append	_register)r   r2   r   r   r   r*   n   s   zPartialSolution._assignr    c                 C  s   d| _ t }| jd j|kr-| jd}||jj | r%| j	|jj= | jd j|ks|D ]}|| j
v r:| j
|= || jv rC| j|= q/| jD ]}|jj|v rT| | qGdS )z
        Resets the current decision level to decision_level, and removes all
        assignments made after that level.
        TN)r   setr   r    popaddr#   r$   is_decisionr   r   r   r4   )r   r    packagesremovedr)   r2   r   r   r   	backtracku   s&   



zPartialSolution.backtrackc                 C  s   |j j}| j|}|dur ||}|dusJ || j|< dS | j|}|du r,|n||}|dus7J | rK|| jv rD| j|= || j|< dS || j|< dS )zD
        Registers an Assignment in _positive or _negative.
        N)r#   r$   r   get	intersectr   r-   )r   r2   nameold_positivevalueold_negativer&   r   r   r   r4      s    


zPartialSolution._registerr&   r	   c                 C  s   d}| j D ]@}|jj|jjkrq|jjs*|j|js*| s q| r&J |  S |du r1|}n||}|dus<J ||rE|  S qtd| d)z
        Returns the first Assignment in this solution such that the sublist of
        assignments up to and including that entry collectively satisfies term.
        Nz[BUG] z is not satisfied.)	r   r#   r$   is_rootis_same_package_asr-   r>   	satisfiesRuntimeError)r   r&   assigned_termr2   r   r   r   	satisfier   s(   


zPartialSolution.satisfierc                 C  s   |  |tjkS r   )relationr   SUBSET)r   r&   r   r   r   rE      s   zPartialSolution.satisfiesstrc                 C  sJ   | j |jj}|d ur||S | j|jj}|d u r tjS ||S r   )r   r=   r#   r$   rI   r   r   OVERLAPPING)r   r&   positivenegativer   r   r   rI      s   

zPartialSolution.relationN)r   r   )r   r   )r   r   )r   r"   )r)   r   r   r   )r#   r   r-   r.   r/   r   r   r   )r2   r   r   r   )r    r   r   r   )r&   r	   r   r   )r&   r	   r   r.   )r&   r	   r   rK   )__name__
__module____qualname____doc__r   propertyr   r    r!   r(   r,   r1   r*   r<   r4   rH   rE   rI   r   r   r   r   r
      s&    
	






"r
   N)
__future__r   typingr   poetry.mixology.assignmentr   poetry.mixology.set_relationr   poetry.core.packages.dependencyr   poetry.core.packages.packager   poetry.mixology.incompatibilityr   poetry.mixology.termr	   r
   r   r   r   r   <module>   s    