def test_cmp_by_priority_prefer_installed_multi_repositories(self): """ Check packages from multiple repositories are sorted accordingt to repository priority. """ numpy_1_6_0 = P("numpy-1.6.0") numpy_1_6_1 = P("numpy-1.6.1") numpy_1_7_0 = P("numpy-1.7.0") i_numpy_1_6_0 = P("numpy-1.6.0") remote_repository = Repository([numpy_1_7_0, numpy_1_6_1, numpy_1_6_0], "remote") installed_repository = Repository([i_numpy_1_6_0], "installed") r_sorted_packages = [ i_numpy_1_6_0, numpy_1_7_0, numpy_1_6_1, numpy_1_6_0 ] pool = Pool([installed_repository, remote_repository]) pool.set_repository_order("installed", "remote") policy = DefaultPolicy() queue = [numpy_1_7_0, i_numpy_1_6_0, numpy_1_6_0, numpy_1_6_1] def _cmp(a, b): return policy.cmp_by_priority_prefer_installed(pool, {}, a, b) self.assertEqual(r_sorted_packages, sorted_with_cmp(queue, cmp=_cmp))
def setUp(self): repo = Repository([mkl_10_1_0, mkl_10_2_0, mkl_10_3_0, mkl_11_0_0, numpy_1_6_0, numpy_1_6_0, numpy_1_6_1, numpy_1_7_0]) pool = Pool() pool.add_repository(repo) self.pool = pool
def test_simple2(self): repo = Repository([self.mkl_10_1_0, self.mkl_10_2_0]) pool = Pool([repo]) self.assertEqual(self.mkl_10_1_0, pool.package_by_id(self.mkl_10_1_0.id)) self.assertEqual(self.mkl_10_2_0, pool.package_by_id(self.mkl_10_2_0.id)) self.assertRaises(MissingPackageInfoInPool, lambda: pool.package_by_id(self.mkl_10_3_0.id))
def test_package_by_id_simple(self): repo = Repository([self.mkl_10_1_0, self.mkl_10_2_0]) pool = Pool() pool.add_repository(repo) self.assertEqual(self.mkl_10_1_0, pool.package_by_id(self.mkl_10_1_0.id)) self.assertEqual(self.mkl_10_2_0, pool.package_by_id(self.mkl_10_2_0.id))
def setUp(self): repo = Repository( [mkl_10_1_0, mkl_10_2_0, mkl_10_3_0, mkl_11_0_0, numpy_1_6_0]) pool = Pool() pool.add_repository(repo) self.pool = pool
def test_complex_scenario_1(self): repo = Repository([mkl_10_1_0, mkl_10_2_0, mkl_10_3_0, mkl_11_0_0, numpy_1_6_0, numpy_1_6_1, numpy_1_7_0, scipy_0_11_0, scipy_0_12_0]) pool = Pool() pool.add_repository(repo) r_rules = set() r_rules.add(PackageRule.from_string("scipy-0.11.0 | scipy-0.12.0", pool)) r_rules.add(PackageRule.from_string("-scipy-0.11.0 | -scipy-0.12.0", pool)) r_rules.add(PackageRule.from_string( "-scipy-0.11.0 | numpy-1.6.0 | numpy-1.6.1 | numpy-1.7.0", pool)) r_rules.add(PackageRule.from_string( "-scipy-0.12.0 | numpy-1.6.0 | numpy-1.6.1 | numpy-1.7.0", pool)) r_rules.add(PackageRule.from_string("-numpy-1.7.0 | -numpy-1.6.1", pool)) r_rules.add(PackageRule.from_string("-numpy-1.7.0 | -numpy-1.6.0", pool)) r_rules.add(PackageRule.from_string("-numpy-1.6.0 | -numpy-1.6.1", pool)) r_rules.add(PackageRule.from_string( "-numpy-1.7.0 | mkl-10.1.0 | mkl-10.2.0 | mkl-10.3.0 | mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string( "-numpy-1.6.1 | mkl-10.1.0 | mkl-10.2.0 | mkl-10.3.0 | mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string( "-numpy-1.6.0 | mkl-10.1.0 | mkl-10.2.0 | mkl-10.3.0 | mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-10.2.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-10.3.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.2.0 | -mkl-10.3.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.2.0 | -mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.3.0 | -mkl-11.0.0", pool)) self.assertEqual(r_rules, set(create_install_rules(pool, R("scipy"))))
def test_literal_to_string(self): pool = Pool([Repository([self.mkl_10_1_0, self.mkl_10_2_0])]) self.assertEqual(pool.id_to_string(self.mkl_10_2_0.id), "+mkl-10.2.0") self.assertEqual(pool.id_to_string(-self.mkl_10_1_0.id), "-mkl-10.1.0")
def test_what_provides_direct_only(self): repo1 = Repository([self.nomkl_numpy_1_7_0]) pool = Pool() pool.add_repository(repo1) self.assertEqual(set(pool.what_provides(R("numpy"))), set([self.nomkl_numpy_1_7_0]))
def setUp(self): self.mkl_10_1_0 = P("mkl-10.1.0") self.mkl_10_2_0 = P("mkl-10.2.0") self.mkl_10_3_0 = P("mkl-10.3.0") self.mkl_11_0_0 = P("mkl-11.0.0") self.numpy_1_6_0 = P("numpy-1.6.0; depends (mkl)") self.numpy_1_6_1 = P("numpy-1.6.1; depends (mkl)") self.numpy_1_7_0 = P("numpy-1.7.0; depends (mkl)") self.nomkl_numpy_1_6_0 = P( "nomkl_numpy-1.6.0; provides(numpy == 1.6.0)") self.nomkl_numpy_1_6_1 = P( "nomkl_numpy-1.6.1; provides(numpy == 1.6.1)") self.nomkl_numpy_1_7_0 = P( "nomkl_numpy-1.7.0; provides(numpy == 1.7.0)") self.mkl_numpy_1_6_1 = P( "mkl_numpy-1.6.1; provides(numpy == 1.6.1); depends (mkl)") self.mkl_numpy_1_7_0 = P( "mkl_numpy-1.7.0; provides(numpy == 1.7.0); depends (mkl)") self.scipy_0_11_0 = P("scipy-0.11.0; depends (numpy >= 1.4.0)") self.scipy_0_12_0 = P("scipy-0.12.0; depends (numpy >= 1.4.0)") self.matplotlib_1_2_0 = P("matplotlib-1.2.0; depends (numpy >= 1.6.0)") repo = Repository([ self.mkl_10_1_0, self.mkl_10_2_0, self.mkl_10_3_0, self.mkl_11_0_0, self.numpy_1_6_0 ]) pool = Pool() pool.add_repository(repo) self.pool = pool
def test_matches(self): pool = Pool() self.assertEqual(pool.matches(self.mkl_10_1_0, R("mkl")), MATCH) self.assertEqual(pool.matches(self.mkl_10_1_0, R("mkl >= 10.2.0")), MATCH_NAME) self.assertEqual(pool.matches(self.mkl_10_1_0, R("numpy")), False) self.assertEqual(pool.matches(self.nomkl_numpy_1_7_0, R("numpy")), MATCH_PROVIDE)
def test_multiple_install_provides(self): # Installed requirement has > 1 one provide repo = Repository([ mkl_10_1_0, mkl_10_2_0, mkl_10_3_0, mkl_11_0_0, numpy_1_6_1, numpy_1_7_0 ]) pool = Pool() pool.add_repository(repo) r_rules = set() r_rules.add(PackageRule.from_string("numpy-1.7.0 | numpy-1.6.1", pool)) r_rules.add( PackageRule.from_string("-numpy-1.7.0 | -numpy-1.6.1", pool)) r_rules.add( PackageRule.from_string( "-numpy-1.7.0 | mkl-10.1.0 | mkl-10.2.0 | mkl-10.3.0 | mkl-11.0.0", pool)) r_rules.add( PackageRule.from_string( "-numpy-1.6.1 | mkl-10.1.0 | mkl-10.2.0 | mkl-10.3.0 | mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-10.2.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-10.3.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.2.0 | -mkl-10.3.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.2.0 | -mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.3.0 | -mkl-11.0.0", pool)) self.assertEqual(r_rules, set(create_install_rules(pool, R("numpy"))))
def test_multiple_provided_names_single_install_provide(self): # Installed requirement has 1 one provide, but multiple provides for # the same name are available in the pool repo = Repository([ mkl_10_1_0, mkl_10_2_0, mkl_10_3_0, mkl_11_0_0, numpy_1_6_1, numpy_1_7_0 ]) pool = Pool() pool.add_repository(repo) r_rules = set() r_rules.add(PackageRule.from_string("numpy-1.7.0", pool)) r_rules.add( PackageRule.from_string("-numpy-1.7.0 | -numpy-1.6.1", pool)) r_rules.add( PackageRule.from_string( "-numpy-1.7.0 | mkl-10.1.0 | mkl-10.2.0 | mkl-10.3.0 | mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-10.2.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-10.3.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.2.0 | -mkl-10.3.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.2.0 | -mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.3.0 | -mkl-11.0.0", pool)) self.assertEqual(r_rules, set(create_install_rules(pool, R("numpy == 1.7.0"))))
def test_what_provides_replaces(self): scikit_learn = P("scikit_learn-0.12.0") sklearn = P("sklearn-0.13.0; replaces (scikit_learn==0.12.0)") pool = Pool([Repository([scikit_learn, sklearn])]) self.assertEqual(set(pool.what_provides(R("sklearn"))), set([sklearn])) self.assertEqual(set(pool.what_provides(R("scikit_learn"))), set([sklearn, scikit_learn]))
def setUp(self): self.mkl_10_1_0 = P("mkl-10.1.0") self.mkl_10_2_0 = P("mkl-10.2.0") self.mkl_10_3_0 = P("mkl-10.3.0") self.mkl_11_0_0 = P("mkl-11.0.0") self.numpy_1_6_0 = P("numpy-1.6.0; depends (mkl)") self.numpy_1_6_1 = P("numpy-1.6.1; depends (mkl)") self.numpy_1_7_0 = P("numpy-1.7.0; depends (mkl)") self.nomkl_numpy_1_6_0 = P("nomkl_numpy-1.6.0; provides(numpy == 1.6.0)") self.nomkl_numpy_1_6_1 = P("nomkl_numpy-1.6.1; provides(numpy == 1.6.1)") self.nomkl_numpy_1_7_0 = P("nomkl_numpy-1.7.0; provides(numpy == 1.7.0)") self.mkl_numpy_1_6_1 = P("mkl_numpy-1.6.1; provides(numpy == 1.6.1); depends (mkl)") self.mkl_numpy_1_7_0 = P("mkl_numpy-1.7.0; provides(numpy == 1.7.0); depends (mkl)") self.scipy_0_11_0 = P("scipy-0.11.0; depends (numpy >= 1.4.0)") self.scipy_0_12_0 = P("scipy-0.12.0; depends (numpy >= 1.4.0)") self.matplotlib_1_2_0 = P("matplotlib-1.2.0; depends (numpy >= 1.6.0)") repo = Repository([self.mkl_10_1_0, self.mkl_10_2_0, self.mkl_10_3_0, self.mkl_11_0_0, self.numpy_1_6_0]) pool = Pool() pool.add_repository(repo) self.pool = pool
def test_simple(self): repo1 = Repository([mkl_10_1_0, mkl_10_2_0]) pool = Pool() pool.add_repository(repo1) self.assertEqual(mkl_10_1_0, pool.package_by_id(mkl_10_1_0.id)) self.assertEqual(mkl_10_2_0, pool.package_by_id(mkl_10_2_0.id)) self.assertRaises(MissingPackageInPool, lambda: pool.package_by_id(mkl_10_3_0.id))
def test_priority_not_registered(self): repo = Repository() pool = Pool() self.assertRaises(DepSolverError, lambda: pool.repository_priority(repo)) self.assertRaises(DepSolverError, lambda: pool.set_repository_order(repo, "dummy"))
def test_simple2(self): repo = Repository([mkl_10_1_0, mkl_10_2_0]) pool = Pool([repo]) self.assertEqual(mkl_10_1_0, pool.package_by_id(mkl_10_1_0.id)) self.assertEqual(mkl_10_2_0, pool.package_by_id(mkl_10_2_0.id)) self.assertRaises(MissingPackageInPool, lambda: pool.package_by_id(mkl_10_3_0.id))
def test_simple_provided(self): r_operations = [Install(nomkl_numpy_1_7_0), Install(scipy_0_11_0)] repo = Repository([mkl_11_0_0, scipy_0_11_0, nomkl_numpy_1_7_0]) pool = Pool() pool.add_repository(repo) installed_repo = Repository() operations = solve(pool, R("scipy"), installed_repo, policy) self.assertEqual(operations, r_operations)
def test_simple(self): r_id = [1, 2] repo1 = Repository(packages=[self.mkl_10_1_0, self.mkl_10_2_0]) pool = Pool() pool.add_repository(repo1) self.assertEqual(self.mkl_10_1_0.id, r_id[0]) self.assertEqual(self.mkl_10_2_0.id, r_id[1]) self.assertRaises(MissingPackageInfoInPool, lambda: pool.package_by_id(self.mkl_10_3_0.id))
def test_no_install(self): """Ensure the most up-to-date version is installed when directly installed.""" repo = Repository([mkl_10_1_0, mkl_10_2_0, mkl_10_3_0, mkl_11_0_0]) pool = Pool() pool.add_repository(repo) installed_repo = Repository() operations = solve(pool, R("mkl"), installed_repo, policy) self.assertEqual(operations, [Install(mkl_11_0_0)])
def test_simple(self): """Numpy depends on MKL, one version of NumPy only.""" repo = Repository([mkl_10_2_0, mkl_10_3_0, mkl_11_0_0, numpy_1_6_0]) pool = Pool() pool.add_repository(repo) installed_repo = Repository() operations = solve(pool, R("numpy"), installed_repo, policy) self.assertEqual(operations, [Install(mkl_11_0_0), Install(numpy_1_6_0)])
def test_simple2(self): """Numpy depends on MKL, ensure we install the most up-to-date version.""" repo = Repository([mkl_10_2_0, mkl_10_3_0, mkl_11_0_0, numpy_1_6_0, numpy_1_7_0]) pool = Pool() pool.add_repository(repo) installed_repo = Repository() operations = solve(pool, R("numpy"), installed_repo, policy) self.assertEqual(operations, [Install(mkl_11_0_0), Install(numpy_1_7_0)])
def test_dependency_already_provided_but_older(self): """Numpy depends on MKL, older MKL already installed.""" repo = Repository([mkl_10_2_0, mkl_10_3_0, mkl_11_0_0, numpy_1_6_0, numpy_1_7_0]) pool = Pool() pool.add_repository(repo) installed_repo = Repository([mkl_10_3_0]) operations = solve(pool, R("numpy"), installed_repo, policy) self.assertEqual(operations, [Install(numpy_1_7_0)])
def test_simple(self): """Ensure the policy returns the highest version across a set of packages with the same name.""" r_candidates = [mkl_10_3_0.id, mkl_11_0_0.id] repository = Repository([mkl_10_3_0, mkl_11_0_0]) pool = Pool() pool.add_repository(repository) policy = DefaultPolicy() candidates = policy.prefered_package_ids(pool, {}, r_candidates) self.assertEqual(list(candidates), [mkl_11_0_0.id])
def test_already_satisfied(self): """Ensure we don't install a more recent version when the requirement is already satisfied.""" repo = Repository([mkl_10_1_0, mkl_10_2_0, mkl_10_3_0, mkl_11_0_0]) pool = Pool() pool.add_repository(repo) installed_repo = Repository() installed_repo.add_package(mkl_10_2_0) operations = solve(pool, R("mkl"), installed_repo, policy) self.assertEqual(operations, [])
def test_already_installed_but_not_satisfied(self): """Ensure we update to the most recent version when the requirement is not already satisfied.""" repo = Repository([mkl_10_1_0, mkl_10_2_0, mkl_10_3_0, mkl_11_0_0]) pool = Pool() pool.add_repository(repo) installed_repo = Repository() installed_repo.add_package(mkl_10_2_0) operations = solve(pool, R("mkl >= 10.3.0"), installed_repo, policy) self.assertEqual(operations, [Update(mkl_10_2_0, mkl_11_0_0)])
def setUp(self): self.mkl_10_1_0 = P("mkl-10.1.0") self.mkl_10_2_0 = P("mkl-10.2.0") self.mkl_10_3_0 = P("mkl-10.3.0") self.mkl_11_0_0 = P("mkl-11.0.0") self.numpy_1_6_0 = P("numpy-1.6.0; depends (mkl)") repo = Repository([self.mkl_10_1_0, self.mkl_10_2_0, self.mkl_10_3_0, self.mkl_11_0_0, self.numpy_1_6_0]) pool = Pool() pool.add_repository(repo) self.pool = pool
def test_simple_fulfilled_installed(self): """Ensure the policy returns the installed version first if it fulfills the requirement, even if higher versions are available.""" r_candidates = [mkl_10_3_0.id, mkl_11_0_0.id] repository = Repository([mkl_10_3_0, mkl_11_0_0]) pool = Pool() pool.add_repository(repository) policy = DefaultPolicy() candidates = policy.prefered_package_ids(pool, {mkl_10_3_0.id: mkl_10_3_0}, r_candidates) self.assertEqual(list(candidates), [mkl_10_3_0.id, mkl_11_0_0.id])
def test_priority_simple(self): paid_repo = Repository([ self.mkl_10_1_0, self.mkl_10_2_0, self.mkl_10_3_0, self.mkl_11_0_0, self.numpy_1_6_0, self.numpy_1_7_0, ], name="paid") free_repo = Repository([self.nomkl_numpy_1_7_0], "free") pool = Pool([paid_repo, free_repo]) pool.set_repository_order("free", before="paid") self.assertEqual(pool.repository_priority(paid_repo), 0) self.assertEqual(pool.repository_priority(free_repo), -1)
def test_simple(self): r_operations = [Install(mkl_11_0_0), Install(numpy_1_7_0), Install(scipy_0_12_0)] repo = Repository([mkl_10_3_0, mkl_11_0_0, numpy_1_6_0, numpy_1_6_1, numpy_1_7_0, scipy_0_12_0]) pool = Pool() pool.add_repository(repo) installed_repo = Repository() req = R("scipy") operations = solve(pool, req, installed_repo, policy) self.assertEqual(operations, r_operations)
def setUp(self): self.mkl_10_1_0 = P("mkl-10.1.0") self.mkl_10_2_0 = P("mkl-10.2.0") self.mkl_10_3_0 = P("mkl-10.3.0") self.mkl_11_0_0 = P("mkl-11.0.0") self.numpy_1_6_0 = P("numpy-1.6.0; depends (mkl)") repo = Repository([ self.mkl_10_1_0, self.mkl_10_2_0, self.mkl_10_3_0, self.mkl_11_0_0, self.numpy_1_6_0 ]) pool = Pool() pool.add_repository(repo) self.pool = pool
def test_complex_scenario_1(self): repo = Repository([ mkl_10_1_0, mkl_10_2_0, mkl_10_3_0, mkl_11_0_0, numpy_1_6_0, numpy_1_6_1, numpy_1_7_0, scipy_0_11_0, scipy_0_12_0 ]) pool = Pool() pool.add_repository(repo) r_rules = set() r_rules.add( PackageRule.from_string("scipy-0.11.0 | scipy-0.12.0", pool)) r_rules.add( PackageRule.from_string("-scipy-0.11.0 | -scipy-0.12.0", pool)) r_rules.add( PackageRule.from_string( "-scipy-0.11.0 | numpy-1.6.0 | numpy-1.6.1 | numpy-1.7.0", pool)) r_rules.add( PackageRule.from_string( "-scipy-0.12.0 | numpy-1.6.0 | numpy-1.6.1 | numpy-1.7.0", pool)) r_rules.add( PackageRule.from_string("-numpy-1.7.0 | -numpy-1.6.1", pool)) r_rules.add( PackageRule.from_string("-numpy-1.7.0 | -numpy-1.6.0", pool)) r_rules.add( PackageRule.from_string("-numpy-1.6.0 | -numpy-1.6.1", pool)) r_rules.add( PackageRule.from_string( "-numpy-1.7.0 | mkl-10.1.0 | mkl-10.2.0 | mkl-10.3.0 | mkl-11.0.0", pool)) r_rules.add( PackageRule.from_string( "-numpy-1.6.1 | mkl-10.1.0 | mkl-10.2.0 | mkl-10.3.0 | mkl-11.0.0", pool)) r_rules.add( PackageRule.from_string( "-numpy-1.6.0 | mkl-10.1.0 | mkl-10.2.0 | mkl-10.3.0 | mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-10.2.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-10.3.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.2.0 | -mkl-10.3.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.2.0 | -mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.3.0 | -mkl-11.0.0", pool)) self.assertEqual(r_rules, set(create_install_rules(pool, R("scipy"))))
def test_what_provides_simple(self): repo1 = Repository([self.numpy_1_6_0, self.numpy_1_7_0]) pool = Pool() pool.add_repository(repo1) self.assertEqual(set(pool.what_provides(R("numpy"))), set([self.numpy_1_6_0, self.numpy_1_7_0])) self.assertEqual(pool.what_provides(R("numpy >= 1.6.1")), [self.numpy_1_7_0]) repo1 = Repository([self.nomkl_numpy_1_7_0]) pool = Pool() pool.add_repository(repo1) self.assertEqual(pool.what_provides(R("numpy")), [self.nomkl_numpy_1_7_0])
def test_simple_fulfilled_installed(self): """Ensure the policy returns the installed version first if it fulfills the requirement, even if higher versions are available.""" mkl_10_4_0 = P("mkl-10.4.0") remote_repository = Repository([self.mkl_10_3_0, self.mkl_11_0_0], "remote") installed_repository = Repository([mkl_10_4_0], "installed") pool = Pool([installed_repository, remote_repository]) pool.set_repository_order("installed", "remote") policy = DefaultPolicy() queue = [p.id for p in [mkl_10_4_0, self.mkl_10_3_0, self.mkl_11_0_0]] candidates = policy.select_preferred_packages(pool, {}, queue) self.assertEqual(list(candidates), [self.mkl_11_0_0.id]) candidates = policy.select_preferred_packages(pool, {mkl_10_4_0.id: True}, queue) self.assertEqual(list(candidates), [mkl_10_4_0.id, self.mkl_11_0_0.id])
def test_already_installed_indirect_provided(self): # Installed requirement has one dependency with multiple provides for # the same name available in the pool, one of which is already # installed. Here: scipy depends on numpy, nomkl_numpy is also # available and already installed repo = Repository([mkl_11_0_0, nomkl_numpy_1_7_0, numpy_1_7_0, scipy_0_11_0]) pool = Pool() pool.add_repository(repo) r_rules = set() r_rules.add(PackageRule.from_string("scipy-0.11.0", pool)) r_rules.add(PackageRule.from_string("-scipy-0.11.0 | numpy-1.7.0 | nomkl_numpy-1.7.0", pool)) r_rules.add(PackageRule.from_string("-numpy-1.7.0 | -nomkl_numpy-1.7.0", pool)) r_rules.add(PackageRule.from_string( "-numpy-1.7.0 | mkl-11.0.0", pool)) self.assertEqual(r_rules, set(create_install_rules(pool, R("scipy"))))
def test_simple(self): """Ensure the policy returns the highest version across a set of packages with the same name.""" pool = Pool([Repository([self.mkl_10_3_0, self.mkl_11_0_0])]) policy = DefaultPolicy() queue = [self.mkl_10_3_0.id, self.mkl_11_0_0.id] candidates = policy.select_preferred_packages(pool, {}, queue) self.assertEqual(list(candidates), [self.mkl_11_0_0.id])
def test_create_install_rules_simple_dependency(self): # Installed requirement has only one provide repo = Repository([mkl_10_1_0, mkl_10_2_0, mkl_10_3_0, mkl_11_0_0, numpy_1_7_0]) pool = Pool() pool.add_repository(repo) r_rules = set() r_rules.add(PackageRule.from_string("numpy-1.7.0", pool)) r_rules.add(PackageRule.from_string( "-numpy-1.7.0 | mkl-10.1.0 | mkl-10.2.0 | mkl-10.3.0 | mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-10.2.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-10.3.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.2.0 | -mkl-10.3.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.2.0 | -mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.3.0 | -mkl-11.0.0", pool)) self.assertEqual(r_rules, set(create_install_rules(pool, R("numpy"))))
def test_already_installed_indirect_provided(self): # Installed requirement has one dependency with multiple provides for # the same name available in the pool, one of which is already # installed. Here: scipy depends on numpy, nomkl_numpy is also # available and already installed repo = Repository( [mkl_11_0_0, nomkl_numpy_1_7_0, numpy_1_7_0, scipy_0_11_0]) pool = Pool() pool.add_repository(repo) r_rules = set() r_rules.add(PackageRule.from_string("scipy-0.11.0", pool)) r_rules.add( PackageRule.from_string( "-scipy-0.11.0 | numpy-1.7.0 | nomkl_numpy-1.7.0", pool)) r_rules.add( PackageRule.from_string("-numpy-1.7.0 | -nomkl_numpy-1.7.0", pool)) r_rules.add(PackageRule.from_string("-numpy-1.7.0 | mkl-11.0.0", pool)) self.assertEqual(r_rules, set(create_install_rules(pool, R("scipy"))))
def test_add_repository(self): """Ensures we do not add the same package twice.""" repo1 = Repository([self.mkl_10_1_0, self.mkl_10_2_0]) pool = Pool() pool.add_repository(repo1) repo2 = Repository([P(str(self.mkl_10_1_0))]) pool.add_repository(repo2) self.assertEqual(len(pool.what_provides(R("mkl"))), 3)
def test_ctor_simple(self): repository = Repository([P("mkl-10.1.0"), P("numpy-1.7.0; depends (MKL >= 10.1.0)"), P("scipy-0.12.0; depends (numpy >= 1.7.0)")]) pool = Pool([repository]) rule = PackageRule(pool, [1, 2], "job_install", "scipy") self.assertEqual(rule.enabled, True) self.assertEqual(rule.literals, [1, 2]) self.assertEqual(rule.reason, "job_install") self.assertEqual(rule.rule_hash, "05cf2")
def test_what_provides_include_indirect(self): repo1 = Repository([numpy_1_6_0, numpy_1_7_0, nomkl_numpy_1_7_0]) pool = Pool() pool.add_repository(repo1) self.assertEqual(pool.what_provides(R("numpy >= 1.6.1")), [numpy_1_7_0]) self.assertEqual(set(pool.what_provides(R("numpy"), 'include_indirect')), set([numpy_1_6_0, numpy_1_7_0, nomkl_numpy_1_7_0])) self.assertEqual(set(pool.what_provides(R("numpy >= 1.6.1"), 'include_indirect')), set([numpy_1_7_0, nomkl_numpy_1_7_0])) self.assertEqual(set(pool.what_provides(R("numpy >= 1.6.1"), 'direct_only')), set([numpy_1_7_0])) self.assertEqual(set(pool.what_provides(R("numpy >= 1.6.1"), 'any')), set([numpy_1_6_0, numpy_1_7_0, nomkl_numpy_1_7_0]))
def test_what_provides_include_indirect(self): repo1 = Repository([numpy_1_6_0, numpy_1_7_0, nomkl_numpy_1_7_0]) pool = Pool() pool.add_repository(repo1) self.assertEqual(pool.what_provides(R("numpy >= 1.6.1")), [numpy_1_7_0]) self.assertEqual( set(pool.what_provides(R("numpy"), 'include_indirect')), set([numpy_1_6_0, numpy_1_7_0, nomkl_numpy_1_7_0])) self.assertEqual( set(pool.what_provides(R("numpy >= 1.6.1"), 'include_indirect')), set([numpy_1_7_0, nomkl_numpy_1_7_0])) self.assertEqual( set(pool.what_provides(R("numpy >= 1.6.1"), 'direct_only')), set([numpy_1_7_0])) self.assertEqual(set(pool.what_provides(R("numpy >= 1.6.1"), 'any')), set([numpy_1_6_0, numpy_1_7_0, nomkl_numpy_1_7_0]))
def test_multiple_provided_names_single_install_provide(self): # Installed requirement has 1 one provide, but multiple provides for # the same name are available in the pool repo = Repository([mkl_10_1_0, mkl_10_2_0, mkl_10_3_0, mkl_11_0_0, numpy_1_6_1, numpy_1_7_0]) pool = Pool() pool.add_repository(repo) r_rules = set() r_rules.add(PackageRule.from_string("numpy-1.7.0", pool)) r_rules.add(PackageRule.from_string("-numpy-1.7.0 | -numpy-1.6.1", pool)) r_rules.add(PackageRule.from_string( "-numpy-1.7.0 | mkl-10.1.0 | mkl-10.2.0 | mkl-10.3.0 | mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-10.2.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-10.3.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.1.0 | -mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.2.0 | -mkl-10.3.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.2.0 | -mkl-11.0.0", pool)) r_rules.add(PackageRule.from_string("-mkl-10.3.0 | -mkl-11.0.0", pool)) self.assertEqual(r_rules, set(create_install_rules(pool, R("numpy == 1.7.0"))))
def test_simple(self): """Test we select the most recent version across a list of same packages with same name.""" packages = [self.numpy_1_6_0, self.numpy_1_6_1, self.numpy_1_7_1] repository = Repository(packages) pool = Pool([repository]) policy = DefaultPolicy() selected_ids = policy.select_preferred_packages( pool, {}, [p.id for p in packages]) r_selected_ids = [self.numpy_1_7_1.id] self.assertEqual(r_selected_ids, selected_ids)
def test_cmp_by_priority_prefer_installed_multi_repositories(self): """ Check packages from multiple repositories are sorted accordingt to repository priority. """ numpy_1_6_0 = P("numpy-1.6.0") numpy_1_6_1 = P("numpy-1.6.1") numpy_1_7_0 = P("numpy-1.7.0") i_numpy_1_6_0 = P("numpy-1.6.0") remote_repository = Repository([numpy_1_7_0, numpy_1_6_1, numpy_1_6_0], "remote") installed_repository = Repository([i_numpy_1_6_0], "installed") r_sorted_packages = [i_numpy_1_6_0, numpy_1_7_0, numpy_1_6_1, numpy_1_6_0] pool = Pool([installed_repository, remote_repository]) pool.set_repository_order("installed", "remote") policy = DefaultPolicy() queue = [numpy_1_7_0, i_numpy_1_6_0, numpy_1_6_0, numpy_1_6_1] def _cmp(a, b): return policy.cmp_by_priority_prefer_installed(pool, {}, a, b) self.assertEqual(r_sorted_packages, sorted_with_cmp(queue, cmp=_cmp))
def test_priority_no_name(self): paid_repo = Repository([ self.mkl_10_1_0, self.mkl_10_2_0, self.mkl_10_3_0, self.mkl_11_0_0, self.numpy_1_7_0, ], name="paid") free_repo = Repository([self.nomkl_numpy_1_7_0], "free") another_repo = Repository([self.numpy_1_6_1], "another_repo") another_repo_wo_name = Repository([self.numpy_1_6_0]) pool = Pool([paid_repo, free_repo, another_repo, another_repo_wo_name]) pool.set_repository_order("free", before="paid") self.assertEqual(pool.repository_priority(paid_repo), 0) self.assertEqual(pool.repository_priority(free_repo), -1) self.assertEqual(pool.repository_priority(another_repo), -1) self.assertEqual(pool.repository_priority(another_repo_wo_name), -1)
def test_has_package(self): pool = Pool([Repository([self.mkl_10_1_0, self.mkl_10_2_0])]) self.assertTrue(pool.has_package(self.mkl_10_1_0)) self.assertFalse(pool.has_package(self.mkl_11_0_0))