
    wBf{                    <   d Z 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	Z	ddl
mZ ddlm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 ej4                  d        Zd Zd Zd Z G d d      Zd Z  e	jB                         efdd       Z" G d d      Z#y)zHelpers for testing the solver.    )annotationsNTemporaryDirectory   )context)Solver)PackagesNotFoundErrorResolvePackageNotFoundUnsatisfiableError)Channel)	MatchSpec)PackageRecord   )helpersc                    t        t        d|        } |t        j                        \  }}t	        |j                               S )z<Get the index data of the ``helpers.get_index_r_*`` helpers.get_index_r_)getattrr   r   subdirlistvalues)num	get_indexindex_s       <lib/python3.12/site-packages/conda/testing/solver_helpers.pyindex_packagesr      s:     <u!56I(HE1    c                    | j                   j                   d| j                   d| j                   d| j                   S )Nz::-channelnameversionbuild)records    r   package_stringr&   %   s7    nn!!""V[[M6>>2B!FLL>RRr   c                >    | D ch c]  }t        |       c}S c c}w )z3Transforms package container in package string set.)r&   packagesr%   s     r   package_string_setr*   )   s    19:vN6":::s   c                B    | D ci c]  }|j                   | c}S c c}w )z/Transforms package container into a dictionary.r"   r(   s     r   package_dictr-   .   s    .67FFKK777s   c                  z    e Zd ZdZdZej                  fdZd ZddZ	dddZ
ddd	Zed
        Zd Zd Zd Zy)SimpleEnvironmentzHelper environment object.)r$   build_numberdependslicensemd5r"   sha256sizer   	timestampr#   track_featuresfeaturesc                    t        j                  |      | _        | j                  dz  | _        | j                  dz  | _        || _        || _        g | _        g | _        y )Nprefixchannels)	pathlibPath_path_prefix_path_channels_path_solver_classsubdirsinstalled_packagesrepo_packages)selfpathsolver_classrB   s       r   __init__zSimpleEnvironment.__init__F   sW    \\$'
 JJ1"jj:5)"$ @Br   c                F   g }| j                          | j                  j                         D ]I  \  }}| j                  ||       t	        t        | j                  |z              }|j                  |       K | j                  | j                  | j                  |||      S )zCWrites ``repo_packages`` to the disk and creates a solver instance.)r:   rB   r;   specs_to_addspecs_to_remove)_write_installed_packages_channel_packagesitems_write_repo_packagesr   strr@   appendrA   r?   rB   )rE   addremover;   channel_namer)   r!   s          r   solverzSimpleEnvironment.solverR   s    &&(&*&<&<&B&B&D 	%"L(%%lH=c$"5"5"DEFGOOG$	% !!$$LL" " 
 	
r   Fc                b    | j                  ||      j                         }|r|S t        |      S )N)rR   rS   )rU   solve_final_stater*   )rE   rR   rS   as_specsr)   s        r   solver_transactionz$SimpleEnvironment.solver_transactionb   s0    ;;3v;6HHJO!(++r   rX   c               (    | j                  ||      S )N)rR   rX   rY   rE   rX   specss      r   installzSimpleEnvironment.installh   s    &&58&DDr   c               (    | j                  ||      S )N)rS   rX   r\   r]   s      r   rS   zSimpleEnvironment.removek   s    &&eh&GGr   c                j    t        | j                  t              r| j                  S d| j                  iS )z<Helper that unfolds the ``repo_packages`` into a dictionary.test)
isinstancerD   dictrE   s    r   rM   z#SimpleEnvironment._channel_packagesn   s1     d(($/%%%**++r   c                    t        |      j                         D ci c]  \  }}|| j                  v r|| }}}d|vrt        j                  |d<   |S c c}}w )zHTurn record into data, to be written in the JSON environment/repo files.r   )varsrN   REPO_DATA_KEYSr   r   )rE   r%   keyvaluedatas        r   _package_datazSimpleEnvironment._package_datau   se     #6l002
Ud))) J
 

 4$^^DN
s   Ac           	        | j                   sy | j                  dz  }|j                  dd       | j                   D ]|  }||j                   d|j                   d|j
                   dz  }| j                  |      }|j                  j                  |d<   |j                  t        j                  |             ~ |dz  }|j                  dj                  d	gt        t        | j                                      y )
Nz
conda-metaT)exist_okparentsr   z.jsonr!   history
z==> 2000-01-01 00:00:00 <==)rC   r?   mkdirr"   r#   r$   rl   r!   
write_textjsondumpsjoinmapr&   )rE   
conda_metar%   record_pathrecord_datahistory_paths         r   rL   z+SimpleEnvironment._write_installed_packages   s    &&&&5
$5-- 	<F}Afnn-=Qv||nERR  ,,V4K%+^^%8%8K	"""4::k#:;	< "I-II1)@)@A	
r   c           
        t        j                  t              }|D ]-  }| j                  |      ||j                     |j
                  <   / t        | j                        j                  t        |j                                     sJ | j                  D ]o  }| j                  |z  |z  }|j                  dd       |j                  d      j                  t        j                  d|i|j!                  |i       d             q y)z#Write packages to the channel path.T)ro   rn   zrepodata.jsonr   )infor)   N)collectionsdefaultdictrd   rl   r   fnsetrB   
issupersetkeysr@   rr   joinpathrs   rt   ru   get)rE   rT   r)   package_datar%   r   subdir_paths          r   rO   z&SimpleEnvironment._write_repo_packages   s     #..t4 	PF595G5G5OL'		2	P 4<< ++C0A0A0C,DEEEll 	F--<vEKdT:  1<<

 %f! %1$4$4VR$@			r   N) r   F)__name__
__module____qualname____doc__rh   r   rB   rH   rU   rY   r_   rS   propertyrM   rl   rL   rO   r   r   r   r/   r/   3   s^    $N  4;?? 
B
 , (- E ', H , ,	
0r   r/   c                     t        d      S Nzconda-test-repo-)r:   r   r   r   r   empty_prefixr      s    %788r   c              #  f   K   t               5 }t        ||        d d d        y # 1 sw Y   y xY wwN)r   r/   )rG   r:   s     r   temp_simple_envr      s.     	 66556 6 6s   1%	1.1c                  H   e Zd ZdZed6d       Zed        Z ej                  d      d        Z	 ej                         d        Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(ejR                  jU                  d&'      d(        Z+ejR                  jU                  d&'      d)        Z,ejR                  jU                  d*'      d+        Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6y5)7SolverTestsz>Tests for :py:class:`conda.core.solve.Solver` implementations.c                    t         )zClass under test.)NotImplementedErrorre   s    r   rG   zSolverTests.solver_class   s
     "!r   c                    i S r   r   re   s    r   tests_to_skipzSolverTests.tests_to_skip   s    	r   T)autousec                    | j                   j                         D ]3  \  }}|j                  j                  |v st	        j
                  |       5 y r   )r   rN   noder"   pytestskip)rE   requestreason	skip_lists       r   
skip_testszSolverTests.skip_tests   sC    !%!3!3!9!9!; 	$FI||  I-F#	$r   c              #     K   t        d      5 }t        || j                        | _        | j                   d | _        d d d        y # 1 sw Y   y xY wwr   )r   r/   rG   env)rE   tmpdirs     r   r   zSolverTests.env   sI     '9: 	f(1B1BCDH((NDH	 	 	s   A1A	 	A	AAc                `    |D ](  t        fd|j                         D              s&c S  y )Nc              3  B   K   | ]  \  }}t        |      |k(    y wr   )r   ).0ri   rj   r%   s      r   	<genexpr>z3SolverTests.find_package_in_list.<locals>.<genexpr>   s!     RZS%763'50Rs   )allrN   )rE   r)   kwargsr%   s      @r   find_package_in_listz SolverTests.find_package_in_list   s+     	FR6<<>RR	r   c                    t        | j                  j                  t              r,d|vrt	        d      | j                  j                  |d      }n| j                  j                  } | j
                  |fi |S )Nr!   zDRepo has multiple channels, the `channel` argument must be specified)rc   r   rD   rd   
ValueErrorr   )rE   r   r)   s      r   find_packagezSolverTests.find_package   sp    dhh,,d3& Z  xx--fY.?@Hxx--H(t((<V<<r   c                    t        |j                  t              sJ |j                  t        u r,t        d |j                  j
                  D              |k(  sJ yy)zHelper to assert that a :py:class:`conda.exceptions.UnsatisfiableError`
        instance as a the specified set of unsatisfiable specifications.
        c              3  N   K   | ]  }t        t        t        |              y wr   )tuplerw   rP   )r   entriess     r   r   z3SolverTests.assert_unsatisfiable.<locals>.<genexpr>   s!      18E#c7+,s   #%N)
issubclasstyper   sortedrj   unsatisfiable)rE   exc_infor   s      r   assert_unsatisfiablez SolverTests.assert_unsatisfiable   s^     (--);<<<==.. <DNN<X<X   /r   c                ^    t        d      |_        |j                         t               k(  sJ y )Nr   )r   rD   r_   r   rE   r   s     r   
test_emptyzSolverTests.test_empty   s%    *1-{{}%%%r   c                X    t        d      |_        |j                  ddd      h dk(  sJ y )Nr   
iopro 1.4*python 2.7*
numpy 1.7*>   test::tk-8.5.13-0test::system-5.8-1test::zlib-1.2.7-0test::python-2.7.5-0test::readline-6.2-0test::sqlite-3.7.13-0test::openssl-1.0.1c-0test::pip-1.3.1-py27_1test::unixodbc-2.3.1-0test::numpy-1.7.1-py27_0test::iopro-1.4.3-np17py27_p0test::distribute-0.6.36-py27_1r   rD   r_   r   s     r   test_iopro_mklzSolverTests.test_iopro_mkl   s4    *1-{{<E J
 
 	
 
r   c                n    t        d      |_        |j                  dddt        d            h dk(  sJ y )Nr   r   r   r   mklr7   >   r   r   r   test::mkl-rt-11.0-p0r   r   r   r   r   r   test::numpy-1.7.1-py27_p0r   r   r   rD   r_   r   r   s     r   test_iopro_nomklzSolverTests.test_iopro_nomkl  s>    *1-{{-yPU7V


 	
 
r   c                    t        d      |_        |j                  d      |j                  dt        d            k(  sJ y )Nr   r   zmkl 11*r   r   r   s     r   test_mklzSolverTests.test_mkl  s?    *1-{{5!S[[y6&
 
 	
 
r   c                    t        d      |_        |j                  d      |j                  dt        d            k(  sJ y )Nr   
accelerater   r   r   r   s     r   test_acceleratezSolverTests.test_accelerate  s?    *1-{{<(CKK)59-
 
 	
 
r   c                    t        d      |_        |j                  dddt        d      d      }|D ]!  }|j                  d	v sd|j
                  v r!J  d
t        |      v sJ dt        |      v sJ y )Nr   scipyr   r   r   r   TrZ   )numpyr   r   ztest::scipy-0.12.0-np17py27_p0)r   rD   r_   r   r"   r8   r*   )rE   r   recordsr%   s       r   test_scipy_mklzSolverTests.test_scipy_mkl$  s    *1-++U+  
  	0F{{00///	0 +.@.IIII/3Eg3NNNNr   c                v    t        d      |_        |j                  ddd      }t        |      dk(  sJ d|v sJ y )Nr   zanaconda 1.5.0r   r   k   test::scipy-0.12.0-np17py27_0)r   rD   r_   lenrE   r   r   s      r   test_anaconda_nomklzSolverTests.test_anaconda_nomkl5  sB    *1-++.|L7|s""".'999r   c                    t        d      |_        |j                  ddd      h dk(  sJ |j                  dddt        d            h dk(  sJ y )	Nr   iopror   
numpy 1.5*>   test::numpy-1.5.1-py27_4r   r   r   r   r   r   r   r   r   test::iopro-1.4.3-np15py27_p0r   r   r   >   test::numpy-1.5.1-py27_p4r   r   r   r   r   r   r   r   r   r   r   r   r   r   s     r   test_pseudo_booleanzSolverTests.test_pseudo_boolean;  sd    *1-{{7M<@ E
 
 	
 
 {{]L)52Q


 	
 
r   c                   t        d      |_        t        j                  t              5 }|j                  dd       d d d        | j                  ddg       t        j                  t              5 }|j                  dd       d d d        | j                  |g d       t        j                  t        t        f      5 }|j                  dd       d d d        |j                  t        u r4t        t        t        |j                  j                              d	gk(  sJ y y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   hxY w)
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   rD   r   raisesr   r_   r   r
   r	   r   r   rw   rP   rj   bad_depsrE   r   r   s      r   test_unsat_from_r1zSolverTests.test_unsat_from_r1^  s%   *1-]]-. 	8(KK&67	8!!C	
 ]]-. 	3(KKk2	3!!	
 ]]24IJK 	4xKKl3	4==22#c8>>#:#:;<.A    3/	8 	8	3 	3	4 	4s#   D"2D. D:"D+.D7:Ec                n   t        j                  ddg      t        j                  ddg      t        j                  dd      t        j                  dd	      g|_        t        j                  t
              5 }|j                  dd       d d d        | j                  d
dg       y # 1 sw Y   xY w)Nac >=1,<2r"   r1   bc >=2,<3c1.0r"   r#   2.0)r   c[version='>=1,<2']r   c[version='>=2,<3']r   r%   rD   r   r   r   r_   r   r   s      r   test_unsat_simplezSolverTests.test_unsat_simple}  s    NNj\:NNj\:NNU3NNU3	
 ]]-. 	"(KKS!	"!!,,	
	" 	"s   ;B++B4c                ^    t        d      |_        |j                  d      }d|v sJ d|v sJ y )Nr   zanaconda 1.4.0ztest::anaconda-1.4.0-np17py33_0ztest::freetype-2.4.10-0r   r   s      r   test_get_distszSolverTests.test_get_dists  s:    *1-++./0G;;;(G333r   c                   t        j                  dddg      t        j                  ddg      t        j                  dd      t        j                  dd	      t        j                  dd
g      g|_        t        j                  t
              5 }|j                  ddd       d d d        | j                  g d       y # 1 sw Y   xY w)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   s      r   test_unsat_shortest_chain_1z'SolverTests.test_unsat_shortest_chain_1  s    NNc:->?NNcU3NN NN NNk];
 ]]-. 	-(KK	3,	-!!	
	- 	-   CCc                   t        j                  dddg      t        j                  ddg      t        j                  dd      t        j                  dd	      t        j                  dd
g      g|_        t        j                  t
              5 }|j                  ddd       d d d        | j                  g d       y # 1 sw Y   xY w)Nr   r  r  r   r   r   r
  r   r  r	  r  ))r   r  )r   r  r  r  r  r  r   s      r   test_unsat_shortest_chain_2z'SolverTests.test_unsat_shortest_chain_2  s    NNc;-?@NNcU3NN NN NNj\:
 ]]-. 	-(KK	3,	-!!	
	- 	-r  c           
        t        j                  dddg      t        j                  ddg      t        j                  dd      t        j                  dd	      t        j                  d
dg      t        j                  ddg      t        j                  dd
g      g|_        t        j                  t
              5 }|j                  ddd       d d d        | j                  g d       y # 1 sw Y   xY w)Nr   fer   r   r   r
  r   r  r  r  r	  r  ))r   r  r  r  r  r  r   s      r   test_unsat_shortest_chain_3z'SolverTests.test_unsat_shortest_chain_3  s    NNc3Z8NNcU3NN NN NNk];NNj\:NNcU3
 ]]-. 	-(KK	3,	-!!	
	- 	-s   C22C;c           
        t        j                  ddg      t        j                  d      t        j                  d      t        j                  ddddg	      t        j                  dd
ddg	      g|_        t        j                  t
              5 }|j                  dd       d d d        | j                  ddg       y # 1 sw Y   xY w)Nr   z	py =3.7.1r   py_req_1r,   py_req_2pyz3.7.1r"   r#   r1   z3.6.1py=3.6.1)r   zpy=3.7.1)r  r  r   s      r   test_unsat_shortest_chain_4z'SolverTests.test_unsat_shortest_chain_4  s    NNk];NN
+NN
+NN7Z4L NN7Z4L

 ]]-. 	)(KKZ(	)!!!	
	) 	)s   CCc           
        t        j                  ddg      t        j                  ddg      t        j                  dddg      t        j                  d	d
      t        j                  ddg      t        j                  dddg      t        j                  d	d
      g|_        t        j                  t
              5 }|j                  dd       d d d        | j                  ddg       y # 1 sw Y   xY w)Nr   r   r   r   r   r   d >=1,<2r  r  r   r  r   r   d >=2,<3)r   r   r   )r  r  r  r   s      r   test_unsat_chainzSolverTests.test_unsat_chain  s     NNcU3NNj\:NNUZLINNU3NNj\:NNUZLINNU3
 ]]-. 	"(KKS!	"!!1,	
	" 	"s   C22C;c                   t        j                  dddg      t        j                  dddg      t        j                  dddg      t        j                  dddg      t        j                  d	ddg      t        j                  d	ddg      t        j                  d
d      t        j                  d
d      t        j                  d
d      g	|_        |j                  ddd      }t	        d |D              sJ t	        d |D              sJ |j                  dd	d      }t	        d |D              sJ t	        d |D              sJ |j                  dd	d      }t	        d |D              sJ t	        d |D              sJ t        j                  t              5 }|j                  ddd	       d d d        | j                  g d       y # 1 sw Y   xY w)Nr   r   r"  r  r   r#  r   zd >=3,<4r   r  r   z3.0TrZ   c              3  \   K   | ]$  }|j                   d k(  xr |j                  dk(   & ywr   r   Nr   r   ks     r   r   z;SolverTests.test_unsat_any_two_not_three.<locals>.<genexpr>  )     KA166S=7QYY%%77K   *,c              3  \   K   | ]$  }|j                   d k(  xr |j                  dk(   & ywr   r   Nr   r(  s     r   r   z;SolverTests.test_unsat_any_two_not_three.<locals>.<genexpr>  r*  r+  c              3  \   K   | ]$  }|j                   d k(  xr |j                  dk(   & ywr   r   Nr   r(  s     r   r   z;SolverTests.test_unsat_any_two_not_three.<locals>.<genexpr>"  r*  r+  c              3  \   K   | ]$  }|j                   d k(  xr |j                  dk(   & yw)r   r   Nr   r(  s     r   r   z;SolverTests.test_unsat_any_two_not_three.<locals>.<genexpr>#  r*  r+  c              3  \   K   | ]$  }|j                   d k(  xr |j                  dk(   & ywr   r   Nr   r(  s     r   r   z;SolverTests.test_unsat_any_two_not_three.<locals>.<genexpr>&  r*  r+  c              3  \   K   | ]$  }|j                   d k(  xr |j                  dk(   & yw)r   r   Nr   r(  s     r   r   z;SolverTests.test_unsat_any_two_not_three.<locals>.<genexpr>'  r*  r+  ))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%   rD   r_   anyr   r   r   r   )rE   r   	installedr   s       r   test_unsat_any_two_not_threez(SolverTests.test_unsat_any_two_not_three  s    NNUZLINNUZLINNUZLINNUZLINNUZLINNUZLINNU3NNU3NNU3

 KKS4K8	KKKKKKKKKKKKS4K8	KKKKKKKKKKKKS4K8	KKKKKKKKKK]]-. 	'(KKS#&	'!!	
	' 	's   'GG!c                   t        j                  dddg      t        j                  ddg      t        j                  ddg      t        j                  dd	      t        j                  dd
	      g|_        t        j                  t
              5 }|j                  d       d d d        | j                  ddg       y # 1 sw Y   xY w)Nr   r   r   r   r"  r#  r  r   r   r   )r   zd[version='>=1,<2'])r   zd[version='>=2,<3']r  r   s      r   test_unsat_expand_singlez$SolverTests.test_unsat_expand_single4  s    NNc3Z8NNj\:NNj\:NNU3NNU3
 ]]-. 	(KK	!!,,	
	 	s   CCc                D   t        j                  dddg      t        j                  ddg      t        j                  dd      g|_        t        j                  t
              5 }|j                  dd       d d d        | j                  dd	g       y # 1 sw Y   xY w)
Nr   r   r   r   r   r   r   )r   r   )r   r  r   s      r   test_unsat_missing_depz"SolverTests.test_unsat_missing_depF  s    NNc3Z8NNj\:NNU3

 ]]-. 	"(KKS!	"!!	
	" 	"s   &BBc                   t        j                  t        t        f      5  |j	                  d       d d d        t        j                  t        t        f      5  |j	                  d       d d d        y # 1 sw Y   CxY w# 1 sw Y   y xY w)Nnotarealpackage 2.0*z	numpy 1.5)r   r   r
   r	   r_   r   s     r   test_nonexistentzSolverTests.test_nonexistentV  sp    ]]24IJK 	0KK./	0]]24IJK 	%KK$	% 	%	0 	0	% 	%s   A4B 4A= B	c           	        t        d      t        j                  dddddg      t        j                  ddddd	g      gz   |_        |j	                  dd      }d
|v sJ d|v sJ |j	                  d	d      }d|v sJ d|v sJ  |j                  dg|j	                  dd       |k(  sJ  |j                  dg|j	                  d	d       |k(  sJ |j	                  d      |k(  sJ y )Nr   	mypackager   hash12_0zlibpng 1.2.*)r"   r#   r$   r6   r1   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_0TrZ   r   r   r%   rD   r_   )rE   r   
records_12
records_15s       r   test_timestamps_and_depsz$SolverTests.test_timestamps_and_deps\  s2   *1-NN  '( NN  '(1
 
" [[=
&*444-;;;[[=
&*444-;;;
 CKKQckk.4k&PQ	
 CKKQckk.4k&PQ	

 {{;':555r   c           
        t        d      t        j                  ddg d      t        j                  ddddg      t        j                  d	ddd
g      t        j                  d	dddg      gz   |_        |j	                  d      h dk(  sJ |j	                  d      h dk(  sJ |j	                  d	      h dk(  sJ t        d      t        j                  ddddg      t        j                  ddg d      t        j                  d	dddg      t        j                  d	dddg      gz   |_        |j	                  d      h dk(  sJ t        j                  t        t        f      5  |j	                  d
       d d d        |j	                  d      h dk(  sJ |j	                  d	      h dk(  sJ y # 1 sw Y   :xY w)Nr   r?  r   )r   python 3.3*r<  r  z1.1r   rG  anotherpackagezmypackage 1.1r   >   r   r   r   test::python-3.3.2-0r   test::mypackage-1.1-0r   r   test::pip-1.3.1-py33_1test::nose-1.3.0-py33_0test::distribute-0.6.36-py33_1zanotherpackage 1.0>   r   r   r   rI  r   rJ  r   r   rK  rL  test::anotherpackage-1.0-0rM  >   r   r   r   rI  r   rJ  r   r   rK  rL  test::anotherpackage-2.0-0rM  zmypackage 1.0>   r   r   r   rI  r   test::mypackage-1.0-0r   r   rK  rL  rM  >   r   r   r   rI  r   rP  r   r   rK  rL  rN  rM  >   r   r   r   rI  r   rP  r   r   rK  rL  rO  rM  )	r   r   r%   rD   r_   r   r   r
   r   r   s     r   test_nonexistent_depsz!SolverTests.test_nonexistent_deps  s   *1-NN G
 NN /
 NN%1
 NN%-!1
 
. {{;' ,
 
 	
 
 {{/0 5
 
 	
 
 {{+, 1
 
 	
 
  +1-NN /
 NN G
 NN%1
 NN%-!1
 
. {{;' ,
 
 	
 
 ]]24FGH 	)KK(	){{/0 5
 
 	
 
" {{+, 1
 
 	
 
'	) 	)s   .F99Gc                    t        d      t        j                  dddgd      t        j                  dddgd      gz   |_        |j	                  dd       y )	Nr   r?  r   rG  feature)r"   r#   r1   r8   )r"   r#   r1   r7   zfeature 1.0rB  r   s     r   !test_install_package_with_featurez-SolverTests.test_install_package_with_feature  s_    *1-NN &"	 NN&(	1
 
 	K/r   c                   t        d      t        fdt        d      D              }t        d |j                  D              }t        j                  |d|j                  j                  dd      d||j                  j                  dd      |j                  j                  dd      	      }t        d      |gz   |_        |j                  d
      }d|vsJ d|v sJ y )Nz#channel-1::scipy==0.11.0=np17py33_3c              3  F   K   | ]  }j                  |      s|  y wr   )match)r   precgood_rec_matchs     r   r   zCSolverTests.test_unintentional_feature_downgrade.<locals>.<genexpr>'  s#      
.2F2Ft2LD
s   !!r   c              3  D   K   | ]  }|j                  d       r|  yw)r   N)
startswith)r   r  s     r   r   zCSolverTests.test_unintentional_feature_downgrade.<locals>.<genexpr>*  s     RqALL<QRs     rb   _3_x0r   )r!   r$   r0   r1   r   urlzscipy 0.11.0ztest::scipy-0.11.0-np17py33_x0ztest::scipy-0.11.0-np17py33_3)r   nextr   r   r1   r   from_objectsr$   replacer   r^  rD   r_   )rE   r   good_recr   bad_recr   rY  s         @r   $test_unintentional_feature_downgradez0SolverTests.test_unintentional_feature_downgrade!  s    
 ##HI 
+A.
 
 RH$4$4RR,,..((u5{{""4/$$T51
 +1-	9++n-/w>>>.'999r   c                   t        d      t        j                  ddg      t        j                  ddg      gz   |_        |j	                  dd      |j	                  d      cxk(  r|j	                  d      k(  sJ  J y )Nr   package1package2r   rB  r   s     r   test_circular_dependenciesz&SolverTests.test_circular_dependencies:  s    *1-NN# NN#	1
 	
 KK
J/{{:&'{{:&'	
'	
'r   c                V    t        d      |_        |j                  dd      h dk(  sJ y )Nr   z
pytz 2012dr   >
   test::pytz-2012d-py33_0r   r   r   rI  r   r   r   rK  rM  r   r   s     r   test_irrational_versionz#SolverTests.test_irrational_versionK  s1    *1-{{<5 :
 
 	
 
r   c                   t        d      |_        |j                  ddd      h dk(  sJ |j                  dddt        d            h dk(  sJ |xj                  t	        j
                  d	d
dg d      t	        j
                  ddddddgd      gz  c_        |j                  dd      h dk(  sJ |j                  ddt        d            h dk(  sJ y )Nr   zpython 2.6*r   zscipy 0.11*>   test::numpy-1.6.2-py26_4test::scipy-0.11.0-np16py26_3r   r   r   test::python-2.6.8-6r   r   r   test::pip-1.3.1-py26_1test::distribute-0.6.36-py26_1r   r   >   test::numpy-1.6.2-py26_p4test::scipy-0.11.0-np16py26_p3r   r   r   r   ro  r   r   r   rp  rq  pandasz0.12.0
np16py27_0)dateutilr   r   pytz)r"   r#   r$   r1   r   z1.6.2py27_p5r   zmkl-rt 11.0z
python 2.7)r"   r#   r$   r0   r1   r8   zpandas 0.12.0 np16py27_0r   >   test::numpy-1.6.2-py27_4r   r   r   r   r   r   r   r   test::six-1.3.0-py27_0test::pytz-2013b-py27_0test::dateutil-2.1-py27_1r   test::pandas-0.12.0-np16py27_0>   test::numpy-1.6.2-py27_p4r   r   r   r   r   r   r   r   r   rz  r{  r|  r   r}  )r   rD   r_   r   r   r%   r   s     r   test_no_featureszSolverTests.test_no_featuresZ  s   *1-{{=,F K
 
 	
 
 {{<	QV8W


 	
 
" 	NN "	
 NN!  

 	
0 {{5}E J
 
 	
 
  {{&yPU7V


 	
 
r   z7CONDA_CHANNEL_PRIORITY does not seem to have any effect)r   c                   i |_         g |j                   d<   t        d      |j                   d<   | j                  dddd      }|j                   d   j                  |       |j	                  dd	       d
|j                  ddd      v sJ |j	                  dd       d|j                  ddd      v sJ t        t        |j                   j                                     |_         |j	                  dd	       d|j                  ddd      v sJ y )Nz	channel-Ar   	channel-1rt  z0.10.1
np17py27_0r    CONDA_CHANNEL_PRIORITYTruez#channel-A::pandas-0.11.0-np16py27_0r   r   Falsez#channel-1::pandas-0.11.0-np16py27_1)	rD   r   r   rQ   setenvr_   rd   reversedrN   )rE   monkeypatchr   pandas_0s       r   test_channel_priority_1z#SolverTests.test_channel_priority_1  s3   
 )++&)7):+&$$	 % 
 	+&--h7 	3V<4m\9
 
 	
 
 	3W=4m\9
 
 	
 
 !#*;*;*A*A*C!DE3V<4m\9
 
 	
 
r   c                   i |_         t        j                  dddg      t        j                  dddg      t        j                  dd      g|j                   d<   t        j                  dd	dg      t        j                  dd	dg      t        j                  dd      t        j                  dd	      g|j                   d
<   |j                  dd       |j	                  ddd      }t        d |D              sJ t        d |D              sJ |j                  dd       |j	                  ddd      }t        d |D              sJ t        d |D              sJ |j                  dd       t        j                  t              5 }|j	                  dd       d d d        | j                  dg       y # 1 sw Y   xY w)Nr   r   r   r  r   r   r   r  r   z	channel-2r  r  TrZ   c              3  \   K   | ]$  }|j                   d k(  xr |j                  dk(   & ywr'  r   r(  s     r   r   z:SolverTests.test_unsat_channel_priority.<locals>.<genexpr>  )     IA166S=7QYY%%77Ir+  c              3  \   K   | ]$  }|j                   d k(  xr |j                  dk(   & ywr-  r   r(  s     r   r   z:SolverTests.test_unsat_channel_priority.<locals>.<genexpr>  r  r+  r  c              3  \   K   | ]$  }|j                   d k(  xr |j                  dk(   & ywr/  r   r(  s     r   r   z:SolverTests.test_unsat_channel_priority.<locals>.<genexpr>  r  r+  c              3  \   K   | ]$  }|j                   d k(  xr |j                  dk(   & ywr2  r   r(  s     r   r   z:SolverTests.test_unsat_channel_priority.<locals>.<genexpr>  r  r+  r  )
rD   r   r%   r  r_   r4  r   r   r   r   )rE   r  r   r   r   s        r   test_unsat_channel_priorityz'SolverTests.test_unsat_channel_priority  s   
  NN
 NN#
 NN*
+&$ NN
 NN#
 NN NN*
+&* 	3V<++c3+6IIIIIIIIII3W=++c3+6IIIIIIIIII3V<]]-. 	"(KKS!	"!!(-I,JK	" 	"s   F>>GzWThere is some weird global state making this test fail when the whole test suite is runc                    t        d      |_        |j                  ddd      }t        |      h dk(  sJ ||_        |j                  d      h dk(  sJ |j                  d      h d	k(  sJ y )
Nr   rt  r   TrZ   >   test::pandas-0.11.0-np17py27_1r   r   r   r   r   r   r   r   rz  r{  r   r|  r   r   >   r   r   r   r   r   r   r   r   rz  r{  r   r|  r   r   r   >   r   r   r   r   r   r   r   r   rz  r{  r|  r   )r   rD   r_   r*   rC   rS   r   s      r   test_removezSolverTests.test_remove  s    
 +1-++h+E!'* /
 
 	
 
$ ")zz(# (
 
 	
 
  zz'" '
 
 	
 
r   c           
        |xj                   t        j                  dd      t        j                  dd      t        j                  ddddg      t        j                  ddd	      gz  c_         |j                  dd      d
dhk(  sJ y )NrS  r"   r7   rf  r"   r8   rg  r   )r"   r#   r8   r1   r   )r"   r#   r8   ztest::package2-2.0-0test::feature-1.0-0rD   r   r%   r_   r   s     r   test_surplus_features_1z#SolverTests.test_surplus_features_1R  s    NN( NN" NN"#	 NN"
 	
* {{:y1"!6
 
 	
 
r   c                   |xj                   t        j                  dd      t        j                  dd      t        j                  dddddg      t        j                  ddd	d
      gz  c_         |j                  dd      ddhk(  sJ y )NrS  r  rf  r  rg  r   r   )r"   r#   r0   r8   r1   r   )r"   r#   r0   r8   ztest::package2-1.0-0r  r  r   s     r   test_surplus_features_2z#SolverTests.test_surplus_features_2m  s    NN( NN" NN"# NN"	!
 	
. {{:y1"!6
 
 	
 
r   c                   |xj                   t        j                  ddddg      t        j                  dddg      t        j                  ddg      t        j                  d	      gz  c_         |j                  d      h d
k(  sJ y )Nr   r   r   zc==2r  r   r   r   r,   >   test::a-2.0-0test::b-1.0-0test::c-1.0-0r  r   s     r   >test_get_reduced_index_broadening_with_unsatisfiable_early_depzJSolverTests.test_get_reduced_index_broadening_with_unsatisfiable_early_dep  s    
 	NN
 f NN
 NN NN'
 	
. {{3 $
 
 	
 
r   c           
        |xj                   t        j                  ddddg      t        j                  dddg      t        j                  ddg      t        j                  dd	
      t        j                  dd
      gz  c_         |j                  dd      D ]h  }|j                  dk(  r$|j
                  dk(  r"J d|j
                          |j                  dk(  sF|j
                  dk(  rVJ d|j
                           y )Ntopr   middlezbottom==1.5r  r   bottomr   z1.5r   z2.5TrZ   z"top version should be 2.0, but is z%bottom version should be 2.5, but is )rD   r   r%   r_   r"   r#   )rE   r   r%   s      r   4test_get_reduced_index_broadening_preferred_solutionz@SolverTests.test_get_reduced_index_broadening_preferred_solution  s    	NN "=1 NN!

 NN!
 NN NN-
 	
6 kk%$k7 	LF{{e#NNe+I77GHI+(NNe+L:6>>:JKL+	Lr   c                   |xj                   t        j                  dd      t        j                  d      gz  c_         |j                  dd      }t	        |      dk(  sJ |d   j
                  t        j
                  k(  sJ y )	Nrf  noarch)r"   r   r,   TrZ   r   r   )rD   r   r%   r_   r   r   r   r   s      r   4test_arch_preferred_over_noarch_when_otherwise_equalz@SolverTests.test_arch_preferred_over_noarch_when_otherwise_equal  s}    NN NN
 	
 ++j4+87|q   qz  GNN222r   c                    |xj                   t        j                  ddd      t        j                  dd      gz  c_         |j                  dd      }t	        |      d	k(  sJ |d
   j
                  dk(  sJ y )Nrf  r   r  r"   r#   r   r   r   TrZ   r   r   rD   r   r%   r_   r   r   r   s      r   4test_noarch_preferred_over_arch_when_version_greaterz@SolverTests.test_noarch_preferred_over_arch_when_version_greater  s    NN
 NN

 
	
 ++j4+87|q   qz  H,,,r   c                $   |xj                   t        j                  dd      t        j                  ddd      t        j                  ddg      gz  c_         |j                  dd	
      }| j	                  |d      }|j
                  dk(  sJ y )Nrf  r   r   r   r  r  rg  r   TrZ   r,   rD   r   r%   r_   r   r   rE   r   r   rf  s       r   8test_noarch_preferred_over_arch_when_version_greater_depzDSolverTests.test_noarch_preferred_over_arch_when_version_greater_dep  s    NN NN
 NN#
 	
 ++j4+8,,W:,F(***r   c                    |xj                   t        j                  dd      t        j                  ddd      gz  c_         |j                  dd      }t	        |      dk(  sJ |d   j
                  dk(  sJ y )	Nrf  r   r"   r0   r   r  r"   r0   r   TrZ   r  r   s      r   2test_noarch_preferred_over_arch_when_build_greaterz>SolverTests.test_noarch_preferred_over_arch_when_build_greater  s    NN NN

 
	
 ++j4+87|q   qz  H,,,r   c                $   |xj                   t        j                  dd      t        j                  ddd      t        j                  ddg      gz  c_         |j                  dd	
      }| j	                  |d      }|j
                  dk(  sJ y )Nrf  r   r  r   r  r  rg  r   TrZ   r,   r  r  s       r   6test_noarch_preferred_over_arch_when_build_greater_depzBSolverTests.test_noarch_preferred_over_arch_when_build_greater_dep  s    NN NN
 NN#
 	
 ++j4+8,,W:,F(***r   N)returnztype[Solver])7r   r   r   r   r   rG   r   r   fixturer   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r$  r6  r8  r:  r=  rE  rQ  rT  rd  rh  rk  r  markxfailr  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r      s   H" "   V^^D!$ "$
 V^^ 
	=&
"
(

O":!
F>
"4
4
4
6
,
,#
J
$
 %&6PI
V0$:2
"
[
z [[WX!
 Y!
F [[WX;L Y;Lz [[:  3
	3
j
6
: 
D&LP3- +(- +r   r   )r  r/   )$r   
__future__r   r~   	functoolsrt   r<   tempfiler   r   base.contextr   
core.solver   
exceptionsr	   r
   r   models.channelr   models.match_specr   models.recordsr    r   	lru_cacher   r&   r*   r-   r/   r   r  r   r   r   r   r   <module>r     s    & "     '  "  
 % ) *     S;
8
y yx9 !' 6 6
o+ o+r   