def test_generate_eq(): dists = r.get_reduced_index(['anaconda']) r2 = Resolve(dists, True, True) C = r2.gen_clauses() eqv, eqb = r2.generate_version_metrics(C, list(r2.groups.keys())) # Should satisfy the following criteria: # - lower versions of the same package should should have higher # coefficients. # - the same versions of the same package (e.g., different build strings) # should have the same coefficients. # - a package that only has one version should not appear, unless # include=True as it will have a 0 coefficient. The same is true of the # latest version of a package. eqv = {Dist(key).to_filename(): value for key, value in iteritems(eqv)} eqb = {Dist(key).to_filename(): value for key, value in iteritems(eqb)} assert eqv == { 'anaconda-1.4.0-np15py26_0.tar.bz2': 1, 'anaconda-1.4.0-np15py27_0.tar.bz2': 1, 'anaconda-1.4.0-np16py26_0.tar.bz2': 1, 'anaconda-1.4.0-np16py27_0.tar.bz2': 1, 'anaconda-1.4.0-np17py26_0.tar.bz2': 1, 'anaconda-1.4.0-np17py27_0.tar.bz2': 1, 'anaconda-1.4.0-np17py33_0.tar.bz2': 1, 'astropy-0.2-np15py26_0.tar.bz2': 1, 'astropy-0.2-np15py27_0.tar.bz2': 1, 'astropy-0.2-np16py26_0.tar.bz2': 1, 'astropy-0.2-np16py27_0.tar.bz2': 1, 'astropy-0.2-np17py26_0.tar.bz2': 1, 'astropy-0.2-np17py27_0.tar.bz2': 1, 'astropy-0.2-np17py33_0.tar.bz2': 1, 'biopython-1.60-np15py26_0.tar.bz2': 1, 'biopython-1.60-np15py27_0.tar.bz2': 1, 'biopython-1.60-np16py26_0.tar.bz2': 1, 'biopython-1.60-np16py27_0.tar.bz2': 1, 'biopython-1.60-np17py26_0.tar.bz2': 1, 'biopython-1.60-np17py27_0.tar.bz2': 1, 'bitarray-0.8.0-py26_0.tar.bz2': 1, 'bitarray-0.8.0-py27_0.tar.bz2': 1, 'bitarray-0.8.0-py33_0.tar.bz2': 1, 'boto-2.8.0-py26_0.tar.bz2': 1, 'boto-2.8.0-py27_0.tar.bz2': 1, 'conda-1.4.4-py27_0.tar.bz2': 1, 'cython-0.18-py26_0.tar.bz2': 1, 'cython-0.18-py27_0.tar.bz2': 1, 'cython-0.18-py33_0.tar.bz2': 1, 'distribute-0.6.34-py26_1.tar.bz2': 1, 'distribute-0.6.34-py27_1.tar.bz2': 1, 'distribute-0.6.34-py33_1.tar.bz2': 1, 'gevent-0.13.7-py26_0.tar.bz2': 1, 'gevent-0.13.7-py27_0.tar.bz2': 1, 'ipython-0.13.1-py26_1.tar.bz2': 1, 'ipython-0.13.1-py27_1.tar.bz2': 1, 'ipython-0.13.1-py33_1.tar.bz2': 1, 'llvmpy-0.11.1-py26_0.tar.bz2': 1, 'llvmpy-0.11.1-py27_0.tar.bz2': 1, 'llvmpy-0.11.1-py33_0.tar.bz2': 1, 'lxml-3.0.2-py26_0.tar.bz2': 1, 'lxml-3.0.2-py27_0.tar.bz2': 1, 'lxml-3.0.2-py33_0.tar.bz2': 1, 'matplotlib-1.2.0-np15py26_1.tar.bz2': 1, 'matplotlib-1.2.0-np15py27_1.tar.bz2': 1, 'matplotlib-1.2.0-np16py26_1.tar.bz2': 1, 'matplotlib-1.2.0-np16py27_1.tar.bz2': 1, 'matplotlib-1.2.0-np17py26_1.tar.bz2': 1, 'matplotlib-1.2.0-np17py27_1.tar.bz2': 1, 'matplotlib-1.2.0-np17py33_1.tar.bz2': 1, 'nose-1.2.1-py26_0.tar.bz2': 1, 'nose-1.2.1-py27_0.tar.bz2': 1, 'nose-1.2.1-py33_0.tar.bz2': 1, 'numba-0.7.0-np16py26_1.tar.bz2': 1, 'numba-0.7.0-np16py27_1.tar.bz2': 1, 'numba-0.7.0-np17py26_1.tar.bz2': 1, 'numba-0.7.0-np17py27_1.tar.bz2': 1, 'numpy-1.5.1-py26_3.tar.bz2': 3, 'numpy-1.5.1-py27_3.tar.bz2': 3, 'numpy-1.6.2-py26_3.tar.bz2': 2, 'numpy-1.6.2-py26_4.tar.bz2': 2, 'numpy-1.6.2-py26_p4.tar.bz2': 2, 'numpy-1.6.2-py27_3.tar.bz2': 2, 'numpy-1.6.2-py27_4.tar.bz2': 2, 'numpy-1.6.2-py27_p4.tar.bz2': 2, 'numpy-1.7.0-py26_0.tar.bz2': 1, 'numpy-1.7.0-py27_0.tar.bz2': 1, 'numpy-1.7.0-py33_0.tar.bz2': 1, 'pandas-0.10.0-np16py26_0.tar.bz2': 2, 'pandas-0.10.0-np16py27_0.tar.bz2': 2, 'pandas-0.10.0-np17py26_0.tar.bz2': 2, 'pandas-0.10.0-np17py27_0.tar.bz2': 2, 'pandas-0.10.1-np16py26_0.tar.bz2': 1, 'pandas-0.10.1-np16py27_0.tar.bz2': 1, 'pandas-0.10.1-np17py26_0.tar.bz2': 1, 'pandas-0.10.1-np17py27_0.tar.bz2': 1, 'pandas-0.10.1-np17py33_0.tar.bz2': 1, 'pandas-0.8.1-np16py26_0.tar.bz2': 5, 'pandas-0.8.1-np16py27_0.tar.bz2': 5, 'pandas-0.8.1-np17py26_0.tar.bz2': 5, 'pandas-0.8.1-np17py27_0.tar.bz2': 5, 'pandas-0.9.0-np16py26_0.tar.bz2': 4, 'pandas-0.9.0-np16py27_0.tar.bz2': 4, 'pandas-0.9.0-np17py26_0.tar.bz2': 4, 'pandas-0.9.0-np17py27_0.tar.bz2': 4, 'pandas-0.9.1-np16py26_0.tar.bz2': 3, 'pandas-0.9.1-np16py27_0.tar.bz2': 3, 'pandas-0.9.1-np17py26_0.tar.bz2': 3, 'pandas-0.9.1-np17py27_0.tar.bz2': 3, 'pip-1.2.1-py26_1.tar.bz2': 1, 'pip-1.2.1-py27_1.tar.bz2': 1, 'pip-1.2.1-py33_1.tar.bz2': 1, 'psutil-0.6.1-py26_0.tar.bz2': 1, 'psutil-0.6.1-py27_0.tar.bz2': 1, 'psutil-0.6.1-py33_0.tar.bz2': 1, 'pyflakes-0.6.1-py26_0.tar.bz2': 1, 'pyflakes-0.6.1-py27_0.tar.bz2': 1, 'pyflakes-0.6.1-py33_0.tar.bz2': 1, 'python-2.6.8-6.tar.bz2': 4, 'python-2.7.3-7.tar.bz2': 3, 'python-2.7.4-0.tar.bz2': 2, 'python-3.3.0-4.tar.bz2': 1, 'pytz-2012j-py26_0.tar.bz2': 1, 'pytz-2012j-py27_0.tar.bz2': 1, 'pytz-2012j-py33_0.tar.bz2': 1, 'requests-0.13.9-py26_0.tar.bz2': 1, 'requests-0.13.9-py27_0.tar.bz2': 1, 'requests-0.13.9-py33_0.tar.bz2': 1, 'scikit-learn-0.13-np15py26_1.tar.bz2': 1, 'scikit-learn-0.13-np15py27_1.tar.bz2': 1, 'scikit-learn-0.13-np16py26_1.tar.bz2': 1, 'scikit-learn-0.13-np16py27_1.tar.bz2': 1, 'scikit-learn-0.13-np17py26_1.tar.bz2': 1, 'scikit-learn-0.13-np17py27_1.tar.bz2': 1, 'scipy-0.11.0-np15py26_3.tar.bz2': 1, 'scipy-0.11.0-np15py27_3.tar.bz2': 1, 'scipy-0.11.0-np16py26_3.tar.bz2': 1, 'scipy-0.11.0-np16py27_3.tar.bz2': 1, 'scipy-0.11.0-np17py26_3.tar.bz2': 1, 'scipy-0.11.0-np17py27_3.tar.bz2': 1, 'scipy-0.11.0-np17py33_3.tar.bz2': 1, 'six-1.2.0-py26_0.tar.bz2': 1, 'six-1.2.0-py27_0.tar.bz2': 1, 'six-1.2.0-py33_0.tar.bz2': 1, 'spyder-2.1.13-py27_0.tar.bz2': 1, 'sqlalchemy-0.7.8-py26_0.tar.bz2': 1, 'sqlalchemy-0.7.8-py27_0.tar.bz2': 1, 'sqlalchemy-0.7.8-py33_0.tar.bz2': 1, 'sympy-0.7.1-py26_0.tar.bz2': 1, 'sympy-0.7.1-py27_0.tar.bz2': 1, 'tornado-2.4.1-py26_0.tar.bz2': 1, 'tornado-2.4.1-py27_0.tar.bz2': 1, 'tornado-2.4.1-py33_0.tar.bz2': 1, 'xlrd-0.9.0-py26_0.tar.bz2': 1, 'xlrd-0.9.0-py27_0.tar.bz2': 1, 'xlrd-0.9.0-py33_0.tar.bz2': 1, 'xlwt-0.7.4-py26_0.tar.bz2': 1, 'xlwt-0.7.4-py27_0.tar.bz2': 1} assert eqb == { 'cairo-1.12.2-0.tar.bz2': 1, 'cubes-0.10.2-py27_0.tar.bz2': 1, 'dateutil-2.1-py26_0.tar.bz2': 1, 'dateutil-2.1-py27_0.tar.bz2': 1, 'dateutil-2.1-py33_0.tar.bz2': 1, 'gevent-websocket-0.3.6-py26_1.tar.bz2': 1, 'gevent-websocket-0.3.6-py27_1.tar.bz2': 1, 'gevent_zeromq-0.2.5-py26_1.tar.bz2': 1, 'gevent_zeromq-0.2.5-py27_1.tar.bz2': 1, 'libnetcdf-4.2.1.1-0.tar.bz2': 1, 'numexpr-2.0.1-np16py26_1.tar.bz2': 2, 'numexpr-2.0.1-np16py26_2.tar.bz2': 1, 'numexpr-2.0.1-np16py26_ce0.tar.bz2': 3, 'numexpr-2.0.1-np16py26_p1.tar.bz2': 2, 'numexpr-2.0.1-np16py26_p2.tar.bz2': 1, 'numexpr-2.0.1-np16py26_pro0.tar.bz2': 3, 'numexpr-2.0.1-np16py27_1.tar.bz2': 2, 'numexpr-2.0.1-np16py27_2.tar.bz2': 1, 'numexpr-2.0.1-np16py27_ce0.tar.bz2': 3, 'numexpr-2.0.1-np16py27_p1.tar.bz2': 2, 'numexpr-2.0.1-np16py27_p2.tar.bz2': 1, 'numexpr-2.0.1-np16py27_pro0.tar.bz2': 3, 'numexpr-2.0.1-np17py26_1.tar.bz2': 2, 'numexpr-2.0.1-np17py26_2.tar.bz2': 1, 'numexpr-2.0.1-np17py26_ce0.tar.bz2': 3, 'numexpr-2.0.1-np17py26_p1.tar.bz2': 2, 'numexpr-2.0.1-np17py26_p2.tar.bz2': 1, 'numexpr-2.0.1-np17py26_pro0.tar.bz2': 3, 'numexpr-2.0.1-np17py27_1.tar.bz2': 2, 'numexpr-2.0.1-np17py27_2.tar.bz2': 1, 'numexpr-2.0.1-np17py27_ce0.tar.bz2': 3, 'numexpr-2.0.1-np17py27_p1.tar.bz2': 2, 'numexpr-2.0.1-np17py27_p2.tar.bz2': 1, 'numexpr-2.0.1-np17py27_pro0.tar.bz2': 3, 'numpy-1.6.2-py26_3.tar.bz2': 1, 'numpy-1.6.2-py27_3.tar.bz2': 1, 'py2cairo-1.10.0-py26_0.tar.bz2': 1, 'py2cairo-1.10.0-py27_0.tar.bz2': 1, 'pycurl-7.19.0-py26_0.tar.bz2': 1, 'pycurl-7.19.0-py27_0.tar.bz2': 1, 'pysal-1.5.0-np15py27_0.tar.bz2': 1, 'pysal-1.5.0-np16py27_0.tar.bz2': 1, 'pysal-1.5.0-np17py27_0.tar.bz2': 1, 'pytest-2.3.4-py26_0.tar.bz2': 1, 'pytest-2.3.4-py27_0.tar.bz2': 1, 'pyzmq-2.2.0.1-py26_0.tar.bz2': 1, 'pyzmq-2.2.0.1-py27_0.tar.bz2': 1, 'pyzmq-2.2.0.1-py33_0.tar.bz2': 1, 'scikit-image-0.8.2-np16py26_0.tar.bz2': 1, 'scikit-image-0.8.2-np16py27_0.tar.bz2': 1, 'scikit-image-0.8.2-np17py26_0.tar.bz2': 1, 'scikit-image-0.8.2-np17py27_0.tar.bz2': 1, 'scikit-image-0.8.2-np17py33_0.tar.bz2': 1, 'sphinx-1.1.3-py26_2.tar.bz2': 1, 'sphinx-1.1.3-py27_2.tar.bz2': 1, 'sphinx-1.1.3-py33_2.tar.bz2': 1, 'statsmodels-0.4.3-np16py26_0.tar.bz2': 1, 'statsmodels-0.4.3-np16py27_0.tar.bz2': 1, 'statsmodels-0.4.3-np17py26_0.tar.bz2': 1, 'statsmodels-0.4.3-np17py27_0.tar.bz2': 1, 'system-5.8-0.tar.bz2': 1, 'theano-0.5.0-np15py26_0.tar.bz2': 1, 'theano-0.5.0-np15py27_0.tar.bz2': 1, 'theano-0.5.0-np16py26_0.tar.bz2': 1, 'theano-0.5.0-np16py27_0.tar.bz2': 1, 'theano-0.5.0-np17py26_0.tar.bz2': 1, 'theano-0.5.0-np17py27_0.tar.bz2': 1, 'zeromq-2.2.0-0.tar.bz2': 1}
def test_generate_eq(): specs = ['anaconda'] dists, specs = r.get_dists(specs) r2 = Resolve(dists, True, True) C = r2.gen_clauses(specs) eqv, eqb = r2.generate_version_metrics(C, specs) # Should satisfy the following criteria: # - lower versions of the same package should should have higher # coefficients. # - the same versions of the same package (e.g., different build strings) # should have the same coefficients. # - a package that only has one version should not appear, unless # include=True as it will have a 0 coefficient. The same is true of the # latest version of a package. assert eqv == { 'astropy-0.2-np15py26_0.tar.bz2': 1, 'astropy-0.2-np16py26_0.tar.bz2': 1, 'astropy-0.2-np17py26_0.tar.bz2': 1, 'astropy-0.2-np17py33_0.tar.bz2': 1, 'bitarray-0.8.0-py26_0.tar.bz2': 1, 'bitarray-0.8.0-py33_0.tar.bz2': 1, 'cython-0.18-py26_0.tar.bz2': 1, 'cython-0.18-py33_0.tar.bz2': 1, 'distribute-0.6.34-py26_1.tar.bz2': 1, 'distribute-0.6.34-py33_1.tar.bz2': 1, 'ipython-0.13.1-py26_1.tar.bz2': 1, 'ipython-0.13.1-py33_1.tar.bz2': 1, 'llvmpy-0.11.1-py26_0.tar.bz2': 1, 'llvmpy-0.11.1-py33_0.tar.bz2': 1, 'lxml-3.0.2-py26_0.tar.bz2': 1, 'lxml-3.0.2-py33_0.tar.bz2': 1, 'matplotlib-1.2.0-np15py26_1.tar.bz2': 1, 'matplotlib-1.2.0-np16py26_1.tar.bz2': 1, 'matplotlib-1.2.0-np17py26_1.tar.bz2': 1, 'matplotlib-1.2.0-np17py33_1.tar.bz2': 1, 'nose-1.2.1-py26_0.tar.bz2': 1, 'nose-1.2.1-py33_0.tar.bz2': 1, 'numpy-1.5.1-py26_3.tar.bz2': 3, 'numpy-1.6.2-py26_3.tar.bz2': 2, 'numpy-1.6.2-py26_4.tar.bz2': 2, 'numpy-1.6.2-py27_4.tar.bz2': 2, 'numpy-1.7.0-py26_0.tar.bz2': 1, 'numpy-1.7.0-py33_0.tar.bz2': 1, 'pip-1.2.1-py26_1.tar.bz2': 1, 'pip-1.2.1-py33_1.tar.bz2': 1, 'psutil-0.6.1-py26_0.tar.bz2': 1, 'psutil-0.6.1-py33_0.tar.bz2': 1, 'pyflakes-0.6.1-py26_0.tar.bz2': 1, 'pyflakes-0.6.1-py33_0.tar.bz2': 1, 'python-2.6.8-6.tar.bz2': 3, 'python-2.7.4-0.tar.bz2': 2, 'python-3.3.0-4.tar.bz2': 1, 'pytz-2012j-py26_0.tar.bz2': 1, 'pytz-2012j-py33_0.tar.bz2': 1, 'requests-0.13.9-py26_0.tar.bz2': 1, 'requests-0.13.9-py33_0.tar.bz2': 1, 'scipy-0.11.0-np15py26_3.tar.bz2': 1, 'scipy-0.11.0-np16py26_3.tar.bz2': 1, 'scipy-0.11.0-np17py26_3.tar.bz2': 1, 'scipy-0.11.0-np17py33_3.tar.bz2': 1, 'six-1.2.0-py26_0.tar.bz2': 1, 'six-1.2.0-py33_0.tar.bz2': 1, 'sqlalchemy-0.7.8-py26_0.tar.bz2': 1, 'sqlalchemy-0.7.8-py33_0.tar.bz2': 1, 'tornado-2.4.1-py26_0.tar.bz2': 1, 'tornado-2.4.1-py33_0.tar.bz2': 1, 'xlrd-0.9.0-py26_0.tar.bz2': 1, 'xlrd-0.9.0-py33_0.tar.bz2': 1} assert eqb == { 'dateutil-2.1-py26_0.tar.bz2': 1, 'dateutil-2.1-py33_0.tar.bz2': 1, 'numpy-1.6.2-py26_3.tar.bz2': 1, 'pyzmq-2.2.0.1-py26_0.tar.bz2': 1, 'pyzmq-2.2.0.1-py33_0.tar.bz2': 1, 'sphinx-1.1.3-py26_2.tar.bz2': 1, 'sphinx-1.1.3-py33_2.tar.bz2': 1, 'system-5.8-0.tar.bz2': 1, 'zeromq-2.2.0-0.tar.bz2': 1}
def test_generate_eq(): specs = ['anaconda'] dists, specs = r.get_dists(specs) r2 = Resolve(dists, True, True) C = r2.gen_clauses(specs) eqv, eqb = r2.generate_version_metrics(C, specs) # Should satisfy the following criteria: # - lower versions of the same package should should have higher # coefficients. # - the same versions of the same package (e.g., different build strings) # should have the same coefficients. # - a package that only has one version should not appear, unless # include=True as it will have a 0 coefficient. The same is true of the # latest version of a package. assert eqv == { 'astropy-0.2-np15py26_0.tar.bz2': 1, 'astropy-0.2-np16py26_0.tar.bz2': 1, 'astropy-0.2-np17py26_0.tar.bz2': 1, 'astropy-0.2-np17py33_0.tar.bz2': 1, 'bitarray-0.8.0-py26_0.tar.bz2': 1, 'bitarray-0.8.0-py33_0.tar.bz2': 1, 'cython-0.18-py26_0.tar.bz2': 1, 'cython-0.18-py33_0.tar.bz2': 1, 'distribute-0.6.34-py26_1.tar.bz2': 1, 'distribute-0.6.34-py33_1.tar.bz2': 1, 'ipython-0.13.1-py26_1.tar.bz2': 1, 'ipython-0.13.1-py33_1.tar.bz2': 1, 'llvmpy-0.11.1-py26_0.tar.bz2': 1, 'llvmpy-0.11.1-py33_0.tar.bz2': 1, 'lxml-3.0.2-py26_0.tar.bz2': 1, 'lxml-3.0.2-py33_0.tar.bz2': 1, 'matplotlib-1.2.0-np15py26_1.tar.bz2': 1, 'matplotlib-1.2.0-np16py26_1.tar.bz2': 1, 'matplotlib-1.2.0-np17py26_1.tar.bz2': 1, 'matplotlib-1.2.0-np17py33_1.tar.bz2': 1, 'nose-1.2.1-py26_0.tar.bz2': 1, 'nose-1.2.1-py33_0.tar.bz2': 1, 'numpy-1.5.1-py26_3.tar.bz2': 3, 'numpy-1.6.2-py26_3.tar.bz2': 2, 'numpy-1.6.2-py26_4.tar.bz2': 2, 'numpy-1.6.2-py27_4.tar.bz2': 2, 'numpy-1.7.0-py26_0.tar.bz2': 1, 'numpy-1.7.0-py33_0.tar.bz2': 1, 'pip-1.2.1-py26_1.tar.bz2': 1, 'pip-1.2.1-py33_1.tar.bz2': 1, 'psutil-0.6.1-py26_0.tar.bz2': 1, 'psutil-0.6.1-py33_0.tar.bz2': 1, 'pyflakes-0.6.1-py26_0.tar.bz2': 1, 'pyflakes-0.6.1-py33_0.tar.bz2': 1, 'python-2.6.8-6.tar.bz2': 3, 'python-2.7.4-0.tar.bz2': 2, 'python-3.3.0-4.tar.bz2': 1, 'pytz-2012j-py26_0.tar.bz2': 1, 'pytz-2012j-py33_0.tar.bz2': 1, 'requests-0.13.9-py26_0.tar.bz2': 1, 'requests-0.13.9-py33_0.tar.bz2': 1, 'scipy-0.11.0-np15py26_3.tar.bz2': 1, 'scipy-0.11.0-np16py26_3.tar.bz2': 1, 'scipy-0.11.0-np17py26_3.tar.bz2': 1, 'scipy-0.11.0-np17py33_3.tar.bz2': 1, 'six-1.2.0-py26_0.tar.bz2': 1, 'six-1.2.0-py33_0.tar.bz2': 1, 'sqlalchemy-0.7.8-py26_0.tar.bz2': 1, 'sqlalchemy-0.7.8-py33_0.tar.bz2': 1, 'tornado-2.4.1-py26_0.tar.bz2': 1, 'tornado-2.4.1-py33_0.tar.bz2': 1, 'xlrd-0.9.0-py26_0.tar.bz2': 1, 'xlrd-0.9.0-py33_0.tar.bz2': 1 } assert eqb == { 'dateutil-2.1-py26_0.tar.bz2': 1, 'dateutil-2.1-py33_0.tar.bz2': 1, 'numpy-1.6.2-py26_3.tar.bz2': 1, 'pyzmq-2.2.0.1-py26_0.tar.bz2': 1, 'pyzmq-2.2.0.1-py33_0.tar.bz2': 1, 'sphinx-1.1.3-py26_2.tar.bz2': 1, 'sphinx-1.1.3-py33_2.tar.bz2': 1, 'system-5.8-0.tar.bz2': 1, 'zeromq-2.2.0-0.tar.bz2': 1 }
def test_generate_eq(): specs = r.verify_specs(['anaconda']) dists, new_specs, unsat = r.get_dists(specs, full=True) r2 = Resolve(dists, sort=True, processed=True) C = r2.gen_clauses() eqv, eqb = r2.generate_version_metrics(C, new_specs) # Should satisfy the following criteria: # - lower versions of the same package should should have higher # coefficients. # - the same versions of the same package (e.g., different build strings) # should have the same coefficients. # - a package that only has one version should not appear, unless # include=True as it will have a 0 coefficient. The same is true of the # latest version of a package. assert eqv == { 'astropy-0.2-np15py26_0.tar.bz2': 1, 'astropy-0.2-np15py27_0.tar.bz2': 1, 'astropy-0.2-np16py26_0.tar.bz2': 1, 'astropy-0.2-np16py27_0.tar.bz2': 1, 'astropy-0.2-np17py26_0.tar.bz2': 1, 'astropy-0.2-np17py27_0.tar.bz2': 1, 'astropy-0.2-np17py33_0.tar.bz2': 1, 'bitarray-0.8.0-py26_0.tar.bz2': 1, 'bitarray-0.8.0-py27_0.tar.bz2': 1, 'bitarray-0.8.0-py33_0.tar.bz2': 1, 'cython-0.18-py26_0.tar.bz2': 1, 'cython-0.18-py27_0.tar.bz2': 1, 'cython-0.18-py33_0.tar.bz2': 1, 'distribute-0.6.34-py26_1.tar.bz2': 1, 'distribute-0.6.34-py27_1.tar.bz2': 1, 'distribute-0.6.34-py33_1.tar.bz2': 1, 'ipython-0.13.1-py26_1.tar.bz2': 1, 'ipython-0.13.1-py27_1.tar.bz2': 1, 'ipython-0.13.1-py33_1.tar.bz2': 1, 'llvmpy-0.11.1-py26_0.tar.bz2': 1, 'llvmpy-0.11.1-py27_0.tar.bz2': 1, 'llvmpy-0.11.1-py33_0.tar.bz2': 1, 'lxml-3.0.2-py26_0.tar.bz2': 1, 'lxml-3.0.2-py27_0.tar.bz2': 1, 'lxml-3.0.2-py33_0.tar.bz2': 1, 'matplotlib-1.2.0-np15py26_1.tar.bz2': 1, 'matplotlib-1.2.0-np15py27_1.tar.bz2': 1, 'matplotlib-1.2.0-np16py26_1.tar.bz2': 1, 'matplotlib-1.2.0-np16py27_1.tar.bz2': 1, 'matplotlib-1.2.0-np17py26_1.tar.bz2': 1, 'matplotlib-1.2.0-np17py27_1.tar.bz2': 1, 'matplotlib-1.2.0-np17py33_1.tar.bz2': 1, 'nose-1.2.1-py26_0.tar.bz2': 1, 'nose-1.2.1-py27_0.tar.bz2': 1, 'nose-1.2.1-py33_0.tar.bz2': 1, 'numpy-1.5.1-py26_3.tar.bz2': 3, 'numpy-1.5.1-py27_3.tar.bz2': 3, 'numpy-1.6.2-py26_3.tar.bz2': 2, 'numpy-1.6.2-py26_4.tar.bz2': 2, 'numpy-1.6.2-py26_p4.tar.bz2': 2, 'numpy-1.6.2-py27_3.tar.bz2': 2, 'numpy-1.6.2-py27_4.tar.bz2': 2, 'numpy-1.6.2-py27_p4.tar.bz2': 2, 'numpy-1.7.0-py26_0.tar.bz2': 1, 'numpy-1.7.0-py27_0.tar.bz2': 1, 'numpy-1.7.0-py33_0.tar.bz2': 1, 'pip-1.2.1-py26_1.tar.bz2': 1, 'pip-1.2.1-py27_1.tar.bz2': 1, 'pip-1.2.1-py33_1.tar.bz2': 1, 'psutil-0.6.1-py26_0.tar.bz2': 1, 'psutil-0.6.1-py27_0.tar.bz2': 1, 'psutil-0.6.1-py33_0.tar.bz2': 1, 'pyflakes-0.6.1-py26_0.tar.bz2': 1, 'pyflakes-0.6.1-py27_0.tar.bz2': 1, 'pyflakes-0.6.1-py33_0.tar.bz2': 1, 'python-2.6.8-6.tar.bz2': 4, 'python-2.7.3-7.tar.bz2': 3, 'python-2.7.4-0.tar.bz2': 2, 'python-3.3.0-4.tar.bz2': 1, 'pytz-2012j-py26_0.tar.bz2': 1, 'pytz-2012j-py27_0.tar.bz2': 1, 'pytz-2012j-py33_0.tar.bz2': 1, 'requests-0.13.9-py26_0.tar.bz2': 1, 'requests-0.13.9-py27_0.tar.bz2': 1, 'requests-0.13.9-py33_0.tar.bz2': 1, 'scipy-0.11.0-np15py26_3.tar.bz2': 1, 'scipy-0.11.0-np15py27_3.tar.bz2': 1, 'scipy-0.11.0-np16py26_3.tar.bz2': 1, 'scipy-0.11.0-np16py27_3.tar.bz2': 1, 'scipy-0.11.0-np17py26_3.tar.bz2': 1, 'scipy-0.11.0-np17py27_3.tar.bz2': 1, 'scipy-0.11.0-np17py33_3.tar.bz2': 1, 'six-1.2.0-py26_0.tar.bz2': 1, 'six-1.2.0-py27_0.tar.bz2': 1, 'six-1.2.0-py33_0.tar.bz2': 1, 'sqlalchemy-0.7.8-py26_0.tar.bz2': 1, 'sqlalchemy-0.7.8-py27_0.tar.bz2': 1, 'sqlalchemy-0.7.8-py33_0.tar.bz2': 1, 'tornado-2.4.1-py26_0.tar.bz2': 1, 'tornado-2.4.1-py27_0.tar.bz2': 1, 'tornado-2.4.1-py33_0.tar.bz2': 1, 'xlrd-0.9.0-py26_0.tar.bz2': 1, 'xlrd-0.9.0-py27_0.tar.bz2': 1, 'xlrd-0.9.0-py33_0.tar.bz2': 1} assert eqb == { 'dateutil-2.1-py26_0.tar.bz2': 1, 'dateutil-2.1-py27_0.tar.bz2': 1, 'dateutil-2.1-py33_0.tar.bz2': 1, 'numpy-1.6.2-py26_3.tar.bz2': 1, 'numpy-1.6.2-py27_3.tar.bz2': 1, 'pyzmq-2.2.0.1-py26_0.tar.bz2': 1, 'pyzmq-2.2.0.1-py27_0.tar.bz2': 1, 'pyzmq-2.2.0.1-py33_0.tar.bz2': 1, 'sphinx-1.1.3-py26_2.tar.bz2': 1, 'sphinx-1.1.3-py27_2.tar.bz2': 1, 'sphinx-1.1.3-py33_2.tar.bz2': 1, 'system-5.8-0.tar.bz2': 1, 'zeromq-2.2.0-0.tar.bz2': 1} # When installing or updating a new package, we want to minimize the # disruption to the rest of the environment. The "target" capability in # MatchSpec helps us prioritize the current version over any upgrades, # followed by any downgrades. So the lowest numbers below represent # the packages that are closest spec2 = [MatchSpec('pandas', target='pandas-0.9.1-np16py27_0.tar.bz2')] eqv, eqb = r2.generate_version_metrics(C, spec2) assert eqv == { 'pandas-0.10.0-np16py26_0.tar.bz2': 1, 'pandas-0.10.0-np16py27_0.tar.bz2': 1, 'pandas-0.10.0-np17py26_0.tar.bz2': 1, 'pandas-0.10.0-np17py27_0.tar.bz2': 1, 'pandas-0.10.1-np16py26_0.tar.bz2': 2, 'pandas-0.10.1-np16py27_0.tar.bz2': 2, 'pandas-0.10.1-np17py26_0.tar.bz2': 2, 'pandas-0.10.1-np17py27_0.tar.bz2': 2, 'pandas-0.10.1-np17py33_0.tar.bz2': 2, 'pandas-0.11.0-np16py26_1.tar.bz2': 3, 'pandas-0.11.0-np16py27_1.tar.bz2': 3, 'pandas-0.11.0-np17py26_1.tar.bz2': 3, 'pandas-0.11.0-np17py27_1.tar.bz2': 3, 'pandas-0.11.0-np17py33_1.tar.bz2': 3, 'pandas-0.8.1-np16py26_0.tar.bz2': 5, 'pandas-0.8.1-np16py27_0.tar.bz2': 5, 'pandas-0.8.1-np17py26_0.tar.bz2': 5, 'pandas-0.8.1-np17py27_0.tar.bz2': 5, 'pandas-0.9.0-np16py26_0.tar.bz2': 4, 'pandas-0.9.0-np16py27_0.tar.bz2': 4, 'pandas-0.9.0-np17py26_0.tar.bz2': 4, 'pandas-0.9.0-np17py27_0.tar.bz2': 4 }