o
    VhI                     @  s  d dl m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 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 e	rd 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+ d dl
m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 ee)ee)e,f f Z5G d d! d!Z6e7e8e9e8 e:f Z;G d"d# d#Z<dLd(d)Z=dMd4d5Z>G d6d% d%e<Z?dNd9d:Z@dOd=d>ZAdPdCdDZBdQdHdIZCejDdRdJdKZEdS )S    )annotationsN)defaultdict)contextmanager)TYPE_CHECKING)	AnyMarkerEmptyMarker)MultiMarker)SingleMarker)parse_marker)resolve_version)SolveFailureError)TransitivePackageInfo)OverrideNeededError)SolverProblemError)	Indicator)Provider)
Collection)Iterator)Sequence)IO)NormalizedName)VersionConstraint)
Dependency)Package)ProjectPackage)
BaseMarker)SelfTransaction)RepositoryPool)Envc                   @  sp   e Zd Z	d)d*ddZed+ddZed,ddZ	d)d-ddZed.ddZ	d/d"d#Z
d0d$d%Zd1d'd(ZdS )2SolverNpackager   poolr    	installedlist[Package]lockedior   active_root_extras!Collection[NormalizedName] | NonereturnNonec                 C  sB   || _ || _|| _|| _|| _t| j | j| j||d| _g | _d S )N)r'   r)   )_package_pool_installed_packages_locked_packages_ior   	_provider
_overrides)selfr#   r$   r%   r'   r(   r)    r5   h/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/poetry/puzzle/solver.py__init__/   s   	
zSolver.__init__r   c                 C  s   | j S N)r2   r4   r5   r5   r6   providerG   s   zSolver.providerenvr!   Iterator[None]c                 c  s:    | j | d V  W d    d S 1 sw   Y  d S r8   )r:   use_environment)r4   r;   r5   r5   r6   r=   K   s   "zSolver.use_environment
use_latestr   c              	   C  sp  ddl m} |  s | j|pg [ t }|  }| D ]}|j	 D ]\}}t
|| jj|j|< q'q t }t| jdkrg| jd|| ddt| j d | jdd	d
d | jD   W d    n1 sqw   Y  W d    n1 sw   Y  |D ]%}	|	jrd|	j d|	j d}
|	jr|
d|	j 7 }
| jd|
 d q|| j|| j| jdS )Nr   r      zComplete version solving took z.3fz seconds with z
 overrideszResolved with overrides: z, c                 s      | ]	}d | dV  qdS )()Nr5   ).0br5   r5   r6   	<genexpr>i       zSolver.solve.<locals>.<genexpr>zThe locked version z for z is a yanked version.z Reason for being yanked: z<warning>Warning: z
</warning>)installed_packagesroot_package)poetry.puzzle.transactionr   	_progressr2   use_latest_fortime_solvevaluesmarkersitemssimplify_markerr-   python_constraintlenr3   debugjoinyankedpretty_versionpretty_nameyanked_reasonr1   write_error_liner0   r/   )r4   r>   r   startpackagestransitive_infogroupmarkerendpmessager5   r5   r6   solveP   sP    zSolver.solvec                 c  sr    | j j r| j r| j d d V  d S t| j d}|dd d V  W d    d S 1 s2w   Y  d S )NzResolving dependencies...z/{message}{context}<debug>({elapsed:2s})</debug>z&<info>Resolving dependencies...</info>)r1   outputis_decoratedr2   is_debugging
write_liner   auto)r4   	indicatorr5   r5   r6   rJ   }   s   
"zSolver._progress	overrides0tuple[dict[Package, dict[str, Dependency]], ...]$dict[Package, TransitivePackageInfo]c                 C  sR   g }|D ]}| j d| d | j | |  }|||f qt|| jjS )NzF<comment>Retrying dependency resolution with the following overrides (z).</comment>)r2   rT   set_overridesrM   appendmerge_override_packagesr-   rR   )r4   rj   override_packagesoverridenew_packagesr5   r5   r6   _solve_in_compatibility_mode   s   	z#Solver._solve_in_compatibility_modec              
   C  s   | j jr| j| j j zt| j| j }|j}W n' ty0 } z| |jW  Y d }~S d }~w t	y? } zt
|d }~ww | |S r8   )r2   r3   rn   r   r-   r\   r   rs   rj   r   r   _aggregate_solved_packages)r4   resultr\   er5   r5   r6   rM      s   

zSolver._solver\   c                   s   t t| j|\}}tdd |D }t|| i }|D ]?}|jrU|D ]0}|jsS|j|jkrS|j|jkrS|jD ] |j jkr@q7t	 fdd|jD rMq7|
  q7q#q|| ||< q|S )Nc                 s  s    | ]}t |V  qd S r8   )aggregate_package_nodes)rC   nodesr5   r5   r6   rE      s    z4Solver._aggregate_solved_packages.<locals>.<genexpr>c                 3  s$    | ]}| ko|j  j kV  qd S r8   )r_   )rC   _depdepr5   r6   rE      s
    
)depth_first_searchPackageNoder-   dictcalculate_markersfeaturesnameversionrequiresanyadd_dependency)r4   r\   combined_nodesrO   resultssolved_packagesr#   r-   r5   rz   r6   rt      s2   


z!Solver._aggregate_solved_packagesr8   )r#   r   r$   r    r%   r&   r'   r&   r(   r   r)   r*   r+   r,   )r+   r   )r;   r!   r+   r<   )r>   r*   r+   r   )r+   r<   )rj   rk   r+   rl   )r+   rl   )r\   r&   r+   rl   )__name__
__module____qualname__r7   propertyr:   r   r=   rc   rJ   rs   rM   rt   r5   r5   r5   r6   r"   .   s    -

r"   c                   @  s4   e Zd Zddd	ZdddZdddZdddZdS )DFSNodeid	DFSNodeIDr   str	base_namer+   r,   c                 C  s   || _ || _|| _d S r8   )r   r   r   )r4   r   r   r   r5   r5   r6   r7      s   
zDFSNode.__init__Sequence[Self]c                 C  s   g S r8   r5   r9   r5   r5   r6   	reachable      zDFSNode.reachableparentslist[PackageNode]c                 C  s   d S r8   r5   r4   r   r5   r5   r6   visit   r   zDFSNode.visitc                 C  s
   t | jS r8   )r   r   r9   r5   r5   r6   __str__   s   
zDFSNode.__str__N)r   r   r   r   r   r   r+   r,   )r+   r   r   r   r+   r,   )r+   r   )r   r   r   r7   r   r   r   r5   r5   r5   r6   r      s
    


r   sourcer}   r+   0tuple[list[list[PackageNode]], MarkerOriginDict]c                   sz   t t}t dd }t }g }t| |||| t t |D ]}|||j   |j | q fdd|D }||fS )Nc                   S  s   t tS r8   )r   r   r5   r5   r5   r6   <lambda>   s    z$depth_first_search.<locals>.<lambda>c                   s"   g | ]}|j  v r |j qS r5   )r   poprC   noder   r5   r6   
<listcomp>   s
    

z&depth_first_search.<locals>.<listcomp>)r   listset	dfs_visitr   r   r   rn   )r   
back_edgesrO   visitedtopo_sorted_nodesr   combined_topo_sorted_nodesr5   r   r6   r|      s   
r|   r   r   "dict[DFSNodeID, list[PackageNode]]r   set[DFSNodeID]sorted_nodesr   rO   MarkerOriginDictr,   c                 C  s   | j |v rd S || j  |  D ]0}||j  |  ||j | j }|| j r-|jn|j ||j | j< t	||||| q|
d|  d S )Nr   )r   addr   rn   r#   unionis_rootr_   without_extrasr   insert)r   r   r   r   rO   out_neighborr_   r5   r5   r6   r     s   
r   c                      s:   e Zd Z			dd fddZdddZdddZ  ZS )r}   Nr#   r   r\   r&   previousPackageNode | Noner{   Dependency | Noner_   BaseMarker | Noner+   r,   c                   s   || _ || _|| _|pt | _d| _|st | _d| _n|r(|j| _|	 | _nt
dt|}t || j| jf||j d S )NTz$Both previous and dep must be passed)r#   r\   r{   r   r_   depth	frozensetgroupsoptionalis_optional
ValueErrorreprsuperr7   r   )r4   r#   r\   r   r{   r_   package_repr	__class__r5   r6   r7     s$   zPackageNode.__init__Sequence[PackageNode]c              
   C  s   g }| j jD ]=}| jD ]7}|j|jkrB||rB|j}| j  r3|jr3|t	d
dd |jD }|t|| j| | jp>|| qq|S )Nz or c                 s  r@   )z
extra == ""Nr5   )rC   extrar5   r5   r6   rE   I  s
    

z(PackageNode.reachable.<locals>.<genexpr>)r#   all_requiresr\   complete_name	satisfiesr_   r   	in_extras	intersectr   rU   rn   r}   r{   )r4   children
dependencypkgr_   r5   r5   r6   r   =  s6   

zPackageNode.reachabler   r   c                   s&   dt  fdd|D dg   _d S )Nr?   c                   s(   g | ]}|j  j kr|jn|jd  qS )r?   )r   r   )rC   parentr9   r5   r6   r   _  s    z%PackageNode.visit.<locals>.<listcomp>)maxr   r   r5   r9   r6   r   [  s   
zPackageNode.visit)NNN)r#   r   r\   r&   r   r   r{   r   r_   r   r+   r,   )r+   r   r   )r   r   r   r7   r   r   __classcell__r5   r5   r   r6   r}     s    
rx   %tuple[Package, TransitivePackageInfo]c                 C  sv   | d j }tdd | D }t }| D ]}||j qtdd | D }| D ]}||_||_q'||_|t||i fS )Nr   c                 s      | ]}|j V  qd S r8   r   r   r5   r5   r6   rE   k      z*aggregate_package_nodes.<locals>.<genexpr>c                 s  r   r8   )r   r   r5   r5   r6   rE   p  r   )	r#   r   r   updater   allr   r   r   )rx   r#   r   r   r   r   r5   r5   r6   rw   g  s   
rw   r\   rl   c              	   C  s  t t}d}|  D ]\}}t||j}||j | q
d}|rd}t|d D ]Z}|| D ]S}| | }dd |jD }	||  D ];\}
}| |
 }|jro|jt|j	krYd}qC|jD ]}|	| 
|j	| ||	|< q\qC|jD ]}|	| 
||	|< qrqC|	|_	q/q)|s!d S d S )Nr   TFr?   c                 S  s   i | ]}|t  qS r5   r   )rC   r^   r5   r5   r6   
<dictcomp>  s    z%calculate_markers.<locals>.<dictcomp>)r   r   rP   r   r   rn   ranger   r   rO   r   r   )r\   rO   packages_by_depth	max_depthr#   infohas_incomplete_markersr   r]   transitive_markerr   mparent_infor^   r5   r5   r6   r   |  s>   


r   rp   Wlist[tuple[dict[Package, dict[str, Dependency]], dict[Package, TransitivePackageInfo]]]rR   r   c                   s  i }i }| D ]I\}}t   | D ]}| D ]
} |j  qqt | | D ]"\}}	|	j D ]\}
}t| |	j|
< q5|	|g 
||	 f q,q| D ]}|d }|dd  }|d }|d |d }||< tdd |D _dd |D _tfdd|D rt  |D ]
\}}} | q fd	d
j D _n5j D ]\}
}||j|
< q|D ] \}}	 |	j D ]\}
}j|
t  |j|
< qq|D ]\}}}|jD ]}||jvr|| qqqT|S )Nr   r?      c                 s  s    | ]	\}}}|j V  qd S r8   r   rC   _r   r5   r5   r6   rE     rF   z*merge_override_packages.<locals>.<genexpr>c                 S  s"   h | ]\}}}|j D ]}|q
qS r5   )r   )rC   r   r   gr5   r5   r6   	<setcomp>  s
    z*merge_override_packages.<locals>.<setcomp>c                 3  s"    | ]\}}}|j  j kV  qd S r8   )rO   r   )package_infor5   r6   rE     s     c                   s   i | ]
\}}|  |qS r5   )r   )rC   r^   r_   )override_markerr5   r6   r     s    
z+merge_override_packages.<locals>.<dictcomp>)r   rN   r   r_   r   rQ   rP   rO   remove_other_from_marker
setdefaultrn   r   r   r   r   r   r   getr   r   )rp   rR   ru   all_packagesrq   
o_packagesdepsr{   r#   r   r^   r_   package_duplicatesbase	remainingfirst_override_markerr   duplicate_packager5   )r   r   r6   ro     sj   






ro   r_   r   otherc                   s`   t |tr	|h nt |trt|j n| S t | tr. | jr.tj fdd| jD  S | S )Nc                 3  s    | ]	}| vr|V  qd S r8   r5   )rC   r   other_markersr5   r6   rE     rF   z+remove_other_from_marker.<locals>.<genexpr>)
isinstancer
   r	   r   rO   issubsetof)r_   r   r5   r   r6   r     s   

r   c                 C  s
   |  |S )z
    Remove constraints from markers that are covered by the projects Python constraint.

    Use cache because we call this function often for the same markers.
    )reduce_by_python_constraint)r_   rR   r5   r5   r6   rQ     s   
	rQ   )r   r}   r+   r   )r   r}   r   r   r   r   r   r   rO   r   r+   r,   )rx   r   r+   r   )r\   rl   rO   r   r+   r,   )rp   r   rR   r   r+   rl   )r_   r   r   r   r+   r   )r_   r   rR   r   r+   r   )F
__future__r   	functoolsrL   collectionsr   
contextlibr   typingr   poetry.core.version.markersr   r   r	   r
   r   poetry.mixologyr   poetry.mixology.failurer   'poetry.packages.transitive_package_infor   poetry.puzzle.exceptionsr   r   poetry.puzzle.providerr   r   collections.abcr   r   r   
cleo.io.ior   packaging.utilsr   poetry.core.constraints.versionr   poetry.core.packages.dependencyr   poetry.core.packages.packager   $poetry.core.packages.project_packager   r   typing_extensionsr   rI   r   poetry.repositoriesr    poetry.utils.envr!   r   r"   tupler   r   boolr   r   r|   r   r}   rw   r   ro   r   cacherQ   r5   r5   r5   r6   <module>   s^     -


J

&
D