Пример #1
0
def get_hgp(qe_token: str,
            qe_url: str,
            default: bool = True) -> HubGroupProject:
    """Return a HubGroupProject for the account.

    Args:
        qe_token: IBM Quantum token.
        qe_url: IBM Quantum auth URL.
        default: If `True`, the default open access hgp is returned.
            Otherwise, a non open access hgp is returned.

    Returns:
        A HubGroupProject, as specified by `default`.
    """
    provider = IBMProvider(qe_token, url=qe_url)  # Default hub/group/project.
    open_hgp = provider._get_hgp()  # Open access hgp
    hgp_to_return = open_hgp
    if not default:
        # Get a non default hgp (i.e. not the default open access hgp).
        hgps = provider._get_hgps()
        for hgp in hgps:
            if hgp != open_hgp:
                hgp_to_return = hgp
                break
    return hgp_to_return
Пример #2
0
 def setUp(self, dependencies: IntegrationTestDependencies) -> None:
     """Initial test setup."""
     # pylint: disable=arguments-differ
     super().setUp()
     self.dependencies = dependencies
     self.provider = IBMProvider(token=dependencies.token,
                                 url=dependencies.url)
Пример #3
0
 def test_active_account_with_saved_instance(self):
     """Test active_account with a saved instance."""
     hgp = self.provider._get_hgp()
     name = "foo"
     with temporary_account_config_file(name=name,
                                        token=self.dependencies.token,
                                        instance=hgp.name):
         provider = IBMProvider(name=name)
     self.assertEqual(hgp.name, provider.active_account()["instance"])
Пример #4
0
 def test_active_account_instance(self):
     """Test active_account returns correct instance."""
     hgp = self.provider._get_hgp()
     provider = IBMProvider(
         token=self.dependencies.token,
         url=self.dependencies.url,
         instance=hgp.name,
     )
     self.assertEqual(hgp.name, provider.active_account()["instance"])
Пример #5
0
 def test_provider_init_token(self):
     """Test initializing IBMProvider with only API token."""
     # pylint: disable=unused-argument
     if self.dependencies.url == AUTH_URL:
         provider = IBMProvider(token=self.dependencies.token)
     else:
         provider = IBMProvider(token=self.dependencies.token,
                                url=self.dependencies.url)
     self.assertIsInstance(provider, IBMProvider)
     self.assertEqual(provider._client_params.token,
                      self.dependencies.token)
Пример #6
0
class TestIBMProviderHubGroupProject(IBMTestCase):
    """Tests for IBMProvider HubGroupProject related methods."""
    @integration_test_setup()
    def setUp(self, dependencies: IntegrationTestDependencies) -> None:
        """Initial test setup."""
        # pylint: disable=arguments-differ
        super().setUp()
        self.dependencies = dependencies
        self.provider = IBMProvider(token=dependencies.token,
                                    url=dependencies.url)

    def test_get_hgp(self):
        """Test get single hgp."""
        hgp = self.provider._get_hgp()
        self.assertEqual(self.provider.backend._default_hgp, hgp)

    def test_get_hgps_with_filter(self):
        """Test get hgps with a filter."""
        hgp = self.provider._get_hgps()[0]
        self.assertEqual(self.provider.backend._default_hgp, hgp)

    def test_get_hgps_no_filter(self):
        """Test get hgps without a filter."""
        hgps = self.provider._get_hgps()
        self.assertIn(self.provider.backend._default_hgp, hgps)

    def test_active_account_instance(self):
        """Test active_account returns correct instance."""
        hgp = self.provider._get_hgp()
        provider = IBMProvider(
            token=self.dependencies.token,
            url=self.dependencies.url,
            instance=hgp.name,
        )
        self.assertEqual(hgp.name, provider.active_account()["instance"])

    def test_active_account_with_saved_instance(self):
        """Test active_account with a saved instance."""
        hgp = self.provider._get_hgp()
        name = "foo"
        with temporary_account_config_file(name=name,
                                           token=self.dependencies.token,
                                           instance=hgp.name):
            provider = IBMProvider(name=name)
        self.assertEqual(hgp.name, provider.active_account()["instance"])
Пример #7
0
 def test_discover_backend_failed(self):
     """Test discovering backends failed."""
     with mock.patch.object(
             AccountClient,
             "list_backends",
             return_value=[{
                 "backend_name": "bad_backend"
             }],
     ):
         with self.assertLogs(hub_group_project.logger,
                              level="WARNING") as context_manager:
             IBMProvider(self.dependencies.token, self.dependencies.url)
     self.assertIn("bad_backend", str(context_manager.output))
Пример #8
0
 def test_pass_unreachable_proxy(self):
     """Test using an unreachable proxy while enabling an account."""
     proxies = {
         "urls": {
             "http": "http://*****:*****@127.0.0.1:5678",
             "https": "https://*****:*****@127.0.0.1:5678",
         }
     }
     with self.assertRaises(RequestsApiError) as context_manager:
         IBMProvider(self.dependencies.token,
                     self.dependencies.url,
                     proxies=proxies)
     self.assertIn("ProxyError", str(context_manager.exception))
Пример #9
0
def most_busy_backend(
    provider: IBMProvider,
    instance: Optional[str] = None,
) -> IBMBackend:
    """Return the most busy backend for the provider given.

    Return the most busy available backend for those that
    have a `pending_jobs` in their `status`. Backends such as
    local backends that do not have this are not considered.

    Args:
        provider: IBM Quantum account provider.
        instance: The provider in the hub/group/project format.

    Returns:
        The most busy backend.
    """
    backends = provider.backends(simulator=False,
                                 operational=True,
                                 instance=instance)
    return max(
        [b for b in backends if b.configuration().n_qubits >= 5],
        key=lambda b: b.status().pending_jobs,
    )