U
    b                     @  s  d dl mZ d dlZ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
Z
ddlmZ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 ddlmZ e dd Zdd Zdd Zdd ZG dd dZ dd Z!e
" efddddZ#G dd dZ$dS )    )annotationsNTemporaryDirectory)Type   )PackagesNotFoundErrorResolvePackageNotFoundUnsatisfiableError)context)Solver)Channel)PackageRecord)	MatchSpec   )helpersc                 C  s*   t td|  }|tj\}}t| S )z<Get the index data of the ``helpers.get_index_r_*`` helpers.Zget_index_r_)getattrr   r
   subdirlistvalues)ZnumZ	get_indexindex_ r   ;lib/python3.8/site-packages/conda/testing/solver_helpers.pyindex_packages   s    r   c                 C  s$   | j j d| j d| j d| j S )Nz::-channelnameversionbuildrecordr   r   r   package_string"   s    r"   c                 C  s   dd | D S )z3Transforms package container in package string set.c                 S  s   h | ]}t |qS r   )r"   .0r!   r   r   r   	<setcomp>(   s     z%package_string_set.<locals>.<setcomp>r   packagesr   r   r   package_string_set&   s    r(   c                 C  s   dd | D S )z/Transforms package container into a dictionary.c                 S  s   i | ]}|j |qS r   r   r#   r   r   r   
<dictcomp>-   s      z package_dict.<locals>.<dictcomp>r   r&   r   r   r   package_dict+   s    r+   c                   @  st   e Zd ZdZdZejfddZdd Zdd	d
Z	ddddZ
ddddZedd Zdd Zdd Zdd ZdS )SimpleEnvironmentzHelper environment object.)r   build_numberdependslicenseZmd5r   Zsha256sizer   	timestampr   track_featuresfeaturesc                 C  s@   t || _| jd | _| jd | _|| _|| _g | _g | _d S )Nprefixchannels)	pathlibPath_path_prefix_path_channels_path_solver_classsubdirsinstalled_packagesrepo_packages)selfpathsolver_classr<   r   r   r   __init__C   s    zSimpleEnvironment.__init__c                 C  s`   g }|    | j D ]0\}}| || tt| j| }|| q| j| j	| j
|||dS )zCWrites ``repo_packages`` to the disk and creates a solver instance.)r4   r<   r5   Zspecs_to_addZspecs_to_remove)_write_installed_packages_channel_packagesitems_write_repo_packagesr   strr:   appendr;   r9   r<   )r?   addremover5   channel_namer'   r   r   r   r   solverO   s    zSimpleEnvironment.solverr   Fc                 C  s"   | j ||d }|r|S t|S )N)rI   rJ   )rL   Zsolve_final_stater(   )r?   rI   rJ   as_specsr'   r   r   r   solver_transaction_   s    z$SimpleEnvironment.solver_transactionrM   c                G  s   | j ||dS )N)rI   rM   rN   r?   rM   Zspecsr   r   r   installe   s    zSimpleEnvironment.installc                G  s   | j ||dS )N)rJ   rM   rP   rQ   r   r   r   rJ   h   s    zSimpleEnvironment.removec                 C  s   t | jtr| jS d| jiS )z<Helper that unfolds the ``repo_packages`` into a dictionary.test)
isinstancer>   dictr?   r   r   r   rD   k   s    z#SimpleEnvironment._channel_packagesc                   s0    fddt | D }d|kr,tj|d< |S )zHTurn record into data, to be written in the JSON environment/repo files.c                   s    i | ]\}}| j kr||qS r   )REPO_DATA_KEYSr$   keyvaluerV   r   r   r*   t   s     
  z3SimpleEnvironment._package_data.<locals>.<dictcomp>r   )varsrE   r
   r   )r?   r!   datar   rV   r   _package_datar   s    
zSimpleEnvironment._package_datac                 C  s   | j s
d S | jd }|jddd | j D ]J}||j d|j d|j d }| |}|jj|d< |t	
| q(|d }|dd
tt| j  d S )Nz
conda-metaT)exist_okparentsr   z.jsonr   history
==> 2000-01-01 00:00:00 <==)rb   )r=   r9   mkdirr   r   r   r]   r   
write_textjsondumpsjoinmapr"   )r?   Z
conda_metar!   Zrecord_pathZrecord_dataZhistory_pathr   r   r   rC   y   s$    

 
 
z+SimpleEnvironment._write_installed_packagesc              
   C  s   t t}|D ]}| |||j |j< qt| jt|	 sFt
| jD ]H}| j| | }|jddd |dtd|i||i d qLdS )z#Write packages to the channel path.T)r_   r^   zrepodata.jsonr   )infor'   N)collectionsdefaultdictrU   r]   r   fnsetr<   
issupersetkeysAssertionErrorr:   rc   Zjoinpathrd   re   rf   get)r?   rK   r'   Zpackage_datar!   r   Zsubdir_pathr   r   r   rF      s     


 
z&SimpleEnvironment._write_repo_packagesN)r   r   F)__name__
__module____qualname____doc__rW   r
   r<   rB   rL   rN   rR   rJ   propertyrD   r]   rC   rF   r   r   r   r   r,   0   s   

r,   c                   C  s
   t ddS Nzconda-test-repo-)r4   r   r   r   r   r   empty_prefix   s    rx   returnc              	   c  s"   t  }t|| V  W 5 Q R X d S N)rx   r,   )rA   r4   r   r   r   temp_simple_env   s    r|   c                   @  s  e Zd ZdZeddddZedd Zejdd	d
d Z	e dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$dBdC Z%dDdE Z&dFdG Z'dHdI Z(ej)j*dJdKdLdM Z+ej)j*dJdKdNdO Z,ej)j*dPdKdQdR Z-dSdT Z.dUdV Z/dWdX Z0dYdZ Z1d[d\ Z2d]d^ Z3d_d` Z4dadb Z5dcdd Z6deS )fSolverTestsz>Tests for :py:class:`conda.core.solve.Solver` implementations.zType[Solver]ry   c                 C  s   t dS )zClass under test.N)NotImplementedErrorrV   r   r   r   rA      s    zSolverTests.solver_classc                 C  s   i S r{   r   rV   r   r   r   tests_to_skip   s    zSolverTests.tests_to_skipT)Zautousec                 C  s.   | j  D ]\}}|jj|kr
t| q
d S r{   )r   rE   Znoder   pytestskip)r?   ZrequestreasonZ	skip_listr   r   r   
skip_tests   s    zSolverTests.skip_testsc              	   c  s6   t dd"}t|| j| _| jV  d | _W 5 Q R X d S rw   )r   r,   rA   env)r?   Ztmpdirr   r   r   r      s    zSolverTests.envc                   s0   |D ]& t  fdd| D r   S qd S )Nc                 3  s    | ]\}}t  ||kV  qd S r{   )r   rX   r    r   r   	<genexpr>   s     z3SolverTests.find_package_in_list.<locals>.<genexpr>)allrE   )r?   r'   kwargsr   r    r   find_package_in_list   s    z SolverTests.find_package_in_listc                 K  sF   t | jjtr0d|krtd| jj|d  }n| jj}| j|f|S )Nr   zDRepo has multiple channels, the `channel` argument must be specified)rT   r   r>   rU   
ValueErrorr   )r?   r   r'   r   r   r   find_package   s    zSolverTests.find_packagec                 C  s<   t |jtst|jtkr8tdd |jjD |ks8tdS )zHelper to assert that a :py:class:`conda.exceptions.UnsatisfiableError`
        instance as a the specified set of unsatisfiable specifications.c                 s  s   | ]}t tt|V  qd S r{   )tuplerh   rG   )r$   entriesr   r   r   r      s     z3SolverTests.assert_unsatisfiable.<locals>.<genexpr>N)
issubclasstyper	   rp   sortedrZ   Zunsatisfiable)r?   exc_infor   r   r   r   assert_unsatisfiable   s    
z SolverTests.assert_unsatisfiablec                 C  s    t d|_| t kstd S )Nr   )r   r>   rR   rm   rp   r?   r   r   r   r   
test_empty   s    
zSolverTests.test_emptyc                 C  s<   t d|_|dddddddd	d
ddddddhks8td S )Nr   
iopro 1.4*python 2.7*
numpy 1.7*test::iopro-1.4.3-np17py27_p0test::numpy-1.7.1-py27_0test::openssl-1.0.1c-0test::python-2.7.5-0test::readline-6.2-0test::sqlite-3.7.13-0test::system-5.8-1test::tk-8.5.13-0test::unixodbc-2.3.1-0test::zlib-1.2.7-0test::distribute-0.6.36-py27_1test::pip-1.3.1-py27_1r   r>   rR   rp   r   r   r   r   test_iopro_mkl   s    
zSolverTests.test_iopro_mklc                 C  sF   t d|_|dddtddddd	d
dddddddddhksBtd S )Nr   r   r   r   mklr2   r   test::mkl-rt-11.0-p0test::numpy-1.7.1-py27_p0r   r   r   r   r   r   r   r   r   r   r   r>   rR   r   rp   r   r   r   r   test_iopro_nomkl   s,    
   zSolverTests.test_iopro_nomklc                 C  s.   t d|_|d|dtddks*td S )Nr   r   zmkl 11*r   r   r   r   r   r   test_mkl  s    
zSolverTests.test_mklc                 C  s.   t d|_|d|dtddks*td S )Nr   Z
accelerater   r   r   r   r   r   r   test_accelerate  s
    
 zSolverTests.test_acceleratec                 C  sj   t d|_|jdddtdddd}|D ]}|jd	kr(d|jks(tq(d
t|ksVtdt|ksftd S )Nr   scipyr   r   r   r   TrO   )numpyr   r   ztest::scipy-0.12.0-np17py27_p0)r   r>   rR   r   r   r3   rp   r(   )r?   r   recordsr!   r   r   r   test_scipy_mkl  s    

zSolverTests.test_scipy_mklc                 C  s8   t d|_|ddd}t|dks(td|ks4td S )Nr   zanaconda 1.5.0r   r   k   test::scipy-0.12.0-np17py27_0)r   r>   rR   lenrp   r?   r   r   r   r   r   test_anaconda_nomkl'  s    
zSolverTests.test_anaconda_nomklc                 C  st   t d|_|dddddddd	d
ddddddhks8t|dddtdddddddd	d
ddddddhksptd S )Nr   Ziopror   
numpy 1.5*ztest::iopro-1.4.3-np15py27_p0ztest::numpy-1.5.1-py27_4r   r   r   r   r   r   r   r   r   r   r   r   r   ztest::numpy-1.5.1-py27_p4)r   r>   rR   rp   r   r   r   r   r   test_pseudo_boolean-  sH    

   zSolverTests.test_pseudo_booleanc              	   C  s   t d|_tt}|dd W 5 Q R X | |ddg tt}|dd W 5 Q R X | |ddd	g tttf}|dd
 W 5 Q R X |j	tkrt
tt|jjdgkstd S )Nr   r   zscipy 0.12.0b1)	numpy=1.5)zscipy==0.12.0b1znumpy[version='1.6.*|1.7.*']	python 3*)r   nosez
python=3.3)r   zpython[version='2.6.*|2.7.*'])zpython=3
numpy 1.6*znumpy[version='1.5.*,1.6.*'])r   r>   r   raisesr	   rR   r   r   r   r   r   rh   rG   rZ   bad_depsrp   r?   r   r   r   r   r   test_unsat_from_r1P  s0    
	
zSolverTests.test_unsat_from_r1c              	   C  sp   t jddgdt jddgdt jdddt jdd	dg|_tt}|dd W 5 Q R X | |d
dg d S )Nac >=1,<2r   r.   bc >=2,<3c1.0r   r   2.0)r   c[version='>=1,<2']r   c[version='>=2,<3']r   r!   r>   r   r   r	   rR   r   r   r   r   r   test_unsat_simpleo  s    zSolverTests.test_unsat_simplec                 C  s0   t d|_|d}d|ks td|ks,td S )Nr   zanaconda 1.4.0ztest::anaconda-1.4.0-np17py33_0ztest::freetype-2.4.10-0r   r   r   r   r   test_get_dists  s    

zSolverTests.test_get_distsc              	   C  s   t jdddgdt jddgdt jdddt jdd	dt jdd
gdg|_tt}|ddd W 5 Q R X | |ddddg d S )Nr   dc <1.3.0r   r   r   1.3.6r   1.2.8	c >=0.8.0c=1.3.6)r   c[version='<1.3.0'])r   r   c[version='>=0.8.0']r   r   r   r   r   r   r   r   test_unsat_shortest_chain_1  s,    z'SolverTests.test_unsat_shortest_chain_1c              	   C  s   t jdddgdt jddgdt jdddt jdd	dt jdd
gdg|_tt}|ddd W 5 Q R X | |ddddg d S )Nr   r   r   r   r   r   r   r   r   r   r   )r   r   )r   r   r   r   r   r   r   r   r   r   test_unsat_shortest_chain_2  s,    z'SolverTests.test_unsat_shortest_chain_2c              
   C  s   t jdddgdt jddgdt jdddt jdd	dt jd
dgdt jddgdt jdd
gdg|_tt}|ddd W 5 Q R X | |dddg d S )Nr   fer   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   test_unsat_shortest_chain_3  s.    z'SolverTests.test_unsat_shortest_chain_3c              	   C  s   t jddgdt jddt jddt jddddgd	t jdd
ddgd	g|_tt}|dd W 5 Q R X | |ddg d S )Nr   z	py =3.7.1r   Zpy_req_1r)   Zpy_req_2pyz3.7.1r   r   r.   z3.6.1py=3.6.1)r   zpy=3.7.1)r   r   r   r   r   r   test_unsat_shortest_chain_4  s    

z'SolverTests.test_unsat_shortest_chain_4c              
   C  s   t jddgdt jddgdt jdddgdt jd	dd
t jddgdt jdddgdt jd	dd
g|_tt}|dd W 5 Q R X | |ddg d S )Nr   r   r   r   r   r   d >=1,<2r   r   r   r   r   r   d >=2,<3)r   r   r   )r   r   r   r   r   r   r   test_unsat_chain  s     	zSolverTests.test_unsat_chainc                 C  s~  t jdddgdt jdddgdt jdddgdt jdddgdt jd	ddgdt jd	ddgdt jd
ddt jd
ddt jd
ddg	|_|jdddd}tdd |D sttdd |D st|jdd	dd}tdd |D sttdd |D st|jdd	dd}tdd |D s,ttdd |D sDttt}|ddd	 W 5 Q R X | 	|dddg d S )Nr   r   r   r   r   r   r   zd >=3,<4r   r   r   z3.0TrO   c                 s  s"   | ]}|j d ko|jdkV  qdS r   r   Nr   r$   kr   r   r   r     s     z;SolverTests.test_unsat_any_two_not_three.<locals>.<genexpr>c                 s  s"   | ]}|j d ko|jdkV  qdS r   r   Nr   r   r   r   r   r     s     c                 s  s"   | ]}|j d ko|jdkV  qdS r   r   Nr   r   r   r   r   r     s     c                 s  s"   | ]}|j d ko|jdkV  qdS )r   r   Nr   r   r   r   r   r     s     c                 s  s"   | ]}|j d ko|jdkV  qdS r   r   Nr   r   r   r   r   r     s     c                 s  s"   | ]}|j d ko|jdkV  qdS )r   r   Nr   r   r   r   r   r     s     )r   zd[version='>=1,<2|>=2,<3'])r   zd[version='>=1,<2|>=3,<4'])r   zd[version='>=2,<3|>=3,<4'])
r   r!   r>   rR   anyrp   r   r   r	   r   )r?   r   Z	installedr   r   r   r   test_unsat_any_two_not_three  s8    z(SolverTests.test_unsat_any_two_not_threec              	   C  s~   t jdddgdt jddgdt jddgdt jddd	t jdd
d	g|_tt}|d W 5 Q R X | |ddg d S )Nr   r   r   r   r   r   r   r   r   r   )r   zd[version='>=1,<2'])r   zd[version='>=2,<3']r   r   r   r   r   test_unsat_expand_single"  s    z$SolverTests.test_unsat_expand_singlec              	   C  sf   t jdddgdt jddgdt jdddg|_tt}|dd W 5 Q R X | |dd	g d S )
Nr   r   r   r   r   r   r   )r   r   )r   r   r   r   r   r   test_unsat_missing_dep4  s    z"SolverTests.test_unsat_missing_depc              	   C  sL   t ttf |d W 5 Q R X t ttf |d W 5 Q R X d S )Nnotarealpackage 2.0*z	numpy 1.5)r   r   r   r   rR   r   r   r   r   test_nonexistentD  s    zSolverTests.test_nonexistentc              	   C  s   t dtjdddddgdtjddddd	gdg |_|dd}d
|ksNtd|ksZt|d	d}d|ksrtd|ks~t|jd|jddd |kst|jd|jd	dd |kst|d|kstd S )Nr   	mypackager   Zhash12_0zlibpng 1.2.*)r   r   r   r1   r.   Zhash15_0r   zlibpng 1.5.*ztest::libpng-1.2.50-0ztest::mypackage-1.0-hash12_0ztest::libpng-1.5.13-1ztest::mypackage-1.0-hash15_0TrO   )r   )r   r   r   r!   r>   rR   rp   )r?   r   Z
records_12Z
records_15r   r   r   test_timestamps_and_depsJ  s2      z$SolverTests.test_timestamps_and_depsc                 C  s  t dtjdddddgdtjddddgdtjd	ddd
gdtjd	dddgdg |_|ddddddddddddhkst|dddddddddddddhkst|d	ddddddddddddhkstt dtjddddgdtjdddddgdtjd	dddgdtjd	dddgdg |_|ddddddddddddhksVtttt	f |d
 W 5 Q R X |dddddddddddddhkst|d	ddddddddddddhkstd S )Nr   r   r   r   python 3.3*r   r   z1.1Zanotherpackagezmypackage 1.1r   ztest::mypackage-1.1-0ztest::nose-1.3.0-py33_0r   test::python-3.3.2-0r   r   r   r   r   test::distribute-0.6.36-py33_1test::pip-1.3.1-py33_1zanotherpackage 1.0ztest::anotherpackage-1.0-0ztest::anotherpackage-2.0-0zmypackage 1.0ztest::mypackage-1.0-0)
r   r   r!   r>   rR   rp   r   r   r   r	   r   r   r   r   test_nonexistent_depsl  s    


z!SolverTests.test_nonexistent_depsc                 C  sB   t dtjdddgddtjdddgddg |_|dd d S )	Nr   r   r   r   feature)r   r   r.   r3   )r   r   r.   r2   zfeature 1.0)r   r   r!   r>   rR   r   r   r   r   !test_install_package_with_feature  s    z-SolverTests.test_install_package_with_featurec                   s   t d t fddtdD }tdd |jD }tj|d|jddd	||j	dd|j
ddd
}td|g |_|d}d|kstd|kstd S )Nz#channel-1::scipy==0.11.0=np17py33_3c                 3  s   | ]}  |r|V  qd S r{   )match)r$   ZprecZgood_rec_matchr   r   r     s     
 zCSolverTests.test_unintentional_feature_downgrade.<locals>.<genexpr>r   c                 s  s   | ]}| d s|V  qdS )r   N)
startswith)r$   r   r   r   r   r     s     
 rS   Z_3Z_x0r   )r   r   r-   r.   rl   urlzscipy 0.11.0ztest::scipy-0.11.0-np17py33_x0ztest::scipy-0.11.0-np17py33_3)r   nextr   r   r.   r   Zfrom_objectsr   replacerl   r   r>   rR   rp   )r?   r   Zgood_recr   Zbad_recr   r   r   r   $test_unintentional_feature_downgrade	  s     

z0SolverTests.test_unintentional_feature_downgradec                 C  s\   t dtjddgdtjddgdg |_|dd|d  krR|dksXn td S )Nr   package1package2r   r   r   r   r   r   test_circular_dependencies   s    
z&SolverTests.test_circular_dependenciesc                 C  s6   t d|_|dddddddd	d
dddh
ks2td S )Nr   z
pytz 2012dr   r   r   r   r   ztest::pytz-2012d-py33_0r   r   r   r   r   r   r   r   r   r   test_irrational_version1  s    

z#SolverTests.test_irrational_versionc                 C  s  t d|_|dddddddd	d
dddddhks6t|dddtdddddddd	d
dddddhkslt| jtjdddddddgdtjddddd d!gdd"g7  _|d#dd$d%d&dd'd(d)d*d
d+ddddhkst|d#dtddd$d%dd,dd'd(d)d*d
d+ddddhkstd S )-Nr   zpython 2.6*r   zscipy 0.11*ztest::distribute-0.6.36-py26_1ztest::numpy-1.6.2-py26_4r   ztest::pip-1.3.1-py26_1ztest::python-2.6.8-6r   ztest::scipy-0.11.0-np16py26_3r   r   r   r   r   r   r   ztest::numpy-1.6.2-py26_p4ztest::scipy-0.11.0-np16py26_p3pandasz0.12.0Z
np16py27_0Zdateutilr   Zpytz)r   r   r   r.   r   z1.6.2Zpy27_p5r   zmkl-rt 11.0z
python 2.7)r   r   r   r-   r.   r3   zpandas 0.12.0 np16py27_0test::dateutil-2.1-py27_1r   ztest::numpy-1.6.2-py27_4ztest::pandas-0.12.0-np16py27_0r   r   test::pytz-2013b-py27_0test::six-1.3.0-py27_0ztest::numpy-1.6.2-py27_p4)r   r>   rR   rp   r   r   r!   r   r   r   r   test_no_features@  s    

   

  zSolverTests.test_no_featuresz7CONDA_CHANNEL_PRIORITY does not seem to have any effect)r   c                 C  s   t  |_g |jd< td|jd< | jddddd}|jd | |dd	 d
|dddksft|dd d|dddkstt t	|j
 |_|dd	 d|dddkstd S )Nz	channel-Ar   	channel-1r  z0.10.1Z
np17py27_0r   CONDA_CHANNEL_PRIORITYTruez#channel-A::pandas-0.11.0-np16py27_0r   r   Falsez#channel-1::pandas-0.11.0-np16py27_1)rj   OrderedDictr>   r   r   rH   setenvrR   rp   reversedrE   )r?   monkeypatchr   Zpandas_0r   r   r   test_channel_priority_1  s:    

  
  
  z#SolverTests.test_channel_priority_1c              	   C  sT  t  |_tjdddgdtjdddgdtjdddg|jd< tjdd	dgdtjdd	dgdtjdddtjdd	dg|jd
< |dd |jdddd}tdd |D sttdd |D st|dd |jdddd}tdd |D sttdd |D st|dd t	
t}|dd W 5 Q R X | |dg d S )Nr   r   r   r   r   r   r   r  r   z	channel-2r  r  TrO   c                 s  s"   | ]}|j d ko|jdkV  qdS r   r   r   r   r   r   r     s     z:SolverTests.test_unsat_channel_priority.<locals>.<genexpr>c                 s  s"   | ]}|j d ko|jdkV  qdS r   r   r   r   r   r   r     s     r  c                 s  s"   | ]}|j d ko|jdkV  qdS r   r   r   r   r   r   r     s     c                 s  s"   | ]}|j d ko|jdkV  qdS r   r   r   r   r   r   r     s     r   )rj   r  r>   r   r!   r  rR   r   rp   r   r   r	   r   )r?   r  r   r   r   r   r   r   test_unsat_channel_priority  s^    


z'SolverTests.test_unsat_channel_priorityzWThere is some weird global state making this test fail when the whole test suite is runc                 C  s   t d|_|jdddd}t|dddd	d
ddddddddddhksHt||_|ddddd	ddddddddddhks|t|dddd	dddddddddhkstd S )Nr   r  r   TrO   r  r   r   r   ztest::pandas-0.11.0-np17py27_1r   r   r  r   r   r	  r   r   r   r   r   )r   r>   rR   r(   rp   r=   rJ   r   r   r   r   test_remove  sd    


zSolverTests.test_removec              
   C  sb   | j tjdddtjdddtjddddgdtjdddd	g7  _ |ddd
dhks^td S )Nr   r   r2   r  r   r3   r  r   )r   r   r3   r.   r   )r   r   r3   ztest::package2-2.0-0test::feature-1.0-0r>   r   r!   rR   rp   r   r   r   r   test_surplus_features_18  s2    
z#SolverTests.test_surplus_features_1c                 C  sf   | j tjdddtjdddtjdddddgdtjddd	dd
g7  _ |ddddhksbtd S )Nr   r  r  r  r  r   r   )r   r   r-   r3   r.   r   )r   r   r-   r3   ztest::package2-1.0-0r  r  r   r   r   r   test_surplus_features_2S  s6    
z#SolverTests.test_surplus_features_2c                 C  sd   | j tjddddgdtjdddgdtjddgdtjdd	g7  _ |dd
ddhks`td S )Nr   r   r   zc==2r   r   r   r   r)   ztest::a-2.0-0ztest::b-1.0-0ztest::c-1.0-0r  r   r   r   r   >test_get_reduced_index_broadening_with_unsatisfiable_early_depp  s0    	zJSolverTests.test_get_reduced_index_broadening_with_unsatisfiable_early_depc              
   C  s   | j tjddddgdtjdddgdtjddgdtjdd	d
tjddd
g7  _ |jdddD ]N}|jdkr|jdkstd|j qd|jdkrd|jdksdtd|j qdd S )Ntopr   Zmiddlezbottom==1.5r   r   Zbottomr   z1.5r   z2.5TrO   z"top version should be 2.0, but is z%bottom version should be 2.5, but is )r>   r   r!   rR   r   r   rp   )r?   r   r!   r   r   r   4test_get_reduced_index_broadening_preferred_solution  sF    



z@SolverTests.test_get_reduced_index_broadening_preferred_solutionc                 C  sZ   | j tjdddtjddg7  _ |jddd}t|dksBt|d jtjksVtd S )	Nr  noarch)r   r   r)   TrO   r   r   )r>   r   r!   rR   r   rp   r   r
   r   r   r   r   4test_arch_preferred_over_noarch_when_otherwise_equal  s    	z@SolverTests.test_arch_preferred_over_noarch_when_otherwise_equalc                 C  s\   | j tjddddtjdddg7  _ |jddd}t|d	ksFt|d
 jdksXtd S )Nr  r   r  r   r   r   r   r   TrO   r   r   r>   r   r!   rR   r   rp   r   r   r   r   r   4test_noarch_preferred_over_arch_when_version_greater  s    z@SolverTests.test_noarch_preferred_over_arch_when_version_greaterc                 C  sd   | j tjdddtjddddtjddgdg7  _ |jdd	d
}| j|dd}|jdks`td S )Nr  r   r   r   r  r!  r  r   TrO   r)   r>   r   r!   rR   r   r   rp   r?   r   r   r  r   r   r   8test_noarch_preferred_over_arch_when_version_greater_dep  s$    zDSolverTests.test_noarch_preferred_over_arch_when_version_greater_depc                 C  s\   | j tjdddtjddddg7  _ |jddd}t|dksFt|d jdksXtd S )	Nr  r   r   r-   r   r  r   r-   r   TrO   r"  r   r   r   r   2test_noarch_preferred_over_arch_when_build_greater  s    z>SolverTests.test_noarch_preferred_over_arch_when_build_greaterc                 C  sd   | j tjdddtjddddtjddgdg7  _ |jdd	d
}| j|dd}|jdks`td S )Nr  r   r'  r   r  r(  r  r   TrO   r)   r$  r%  r   r   r   6test_noarch_preferred_over_arch_when_build_greater_dep  s$    zBSolverTests.test_noarch_preferred_over_arch_when_build_greater_depN)7rr   rs   rt   ru   rv   rA   r   r   fixturer   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   r   r  r  r  r
  ZmarkZxfailr  r  r  r  r  r  r  r   r#  r&  r)  r*  r   r   r   r   r}      sr   




#%" ]
#
=
5"(r}   )%Z
__future__r   rj   	functoolsre   r6   Ztempfiler   typingr   r   
exceptionsr   r   r	   Zbase.contextr
   Z
core.solver   Zmodels.channelr   Zmodels.recordsr   Zmodels.match_specr    r   	lru_cacher   r"   r(   r+   r,   rx   r+  r|   r}   r   r   r   r   <module>   s0   
v