Skip to content

Commit

Permalink
[DEM-1418] No message about non-optimized experiments on hardware bac…
Browse files Browse the repository at this point in the history
…kends
  • Loading branch information
QFer committed Apr 9, 2020
1 parent 54f9c80 commit 1397233
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 7 deletions.
7 changes: 4 additions & 3 deletions src/quantuminspire/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,8 @@ def delete_job(self, job_id: int) -> Dict[str, Any]:
raise ApiError(f'Job with id {job_id} does not exist!') from err_msg

def _create_job(self, name: str, asset: Dict[str, Any], project: Dict[str, Any], number_of_shots: int,
full_state_projection: bool = False, user_data: str = '') -> Dict[str, Any]:
backend_type: Dict[str, Any], full_state_projection: bool = False,
user_data: str = '') -> Dict[str, Any]:
""" Creates a new job for executing cQASM code. This method is used by execute_qasm_async and indirectly
by execute_qasm.
Expand All @@ -472,7 +473,7 @@ def _create_job(self, name: str, asset: Dict[str, Any], project: Dict[str, Any],
'full_state_projection': full_state_projection,
'user_data': user_data
}
if not full_state_projection and self.enable_fsp_warning:
if not full_state_projection and self.enable_fsp_warning and not backend_type["is_hardware_backend"]:
logger.warning("Your experiment can not be optimized and may take longer to execute, "
"see https://www.quantum-inspire.com/kbase/optimization-of-simulations/ for details.")
try:
Expand Down Expand Up @@ -933,7 +934,7 @@ def execute_qasm_async(self, qasm: str, backend_type: Optional[Union[Dict[str, A

if job_name is None:
job_name = f'qi-sdk-job-{identifier}'
job = self._create_job(job_name, asset, project, number_of_shots, user_data=user_data,
job = self._create_job(job_name, asset, project, number_of_shots, backend_type, user_data=user_data,
full_state_projection=full_state_projection)

return QuantumInspireJob(self, job['id'])
31 changes: 27 additions & 4 deletions src/tests/quantuminspire/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,12 @@ def test_create_job_has_correct_input_and_output_without_fsp(self):
name = 'TestJob'
asset = {'url': 'https://api.quantum-inspire.com/assets/1/'}
project = {'backend_type': 'https://api.quantum-inspire.com/backendtypes/1/'}
backend_type_sim = {'url': 'https://api.quantum-inspire.com/backendtypes/1/',
'name': 'QX Single-node Simulator',
'is_hardware_backend': False}
backend_type_hw = {'url': 'https://api.quantum-inspire.com/backendtypes/1/',
'name': 'Spin-2',
'is_hardware_backend': True}
number_of_shots = 1
expected_payload = {
'status': 'NEW',
Expand All @@ -514,14 +520,24 @@ def test_create_job_has_correct_input_and_output_without_fsp(self):
logging.getLogger().addHandler(stream_handler)

api.show_fsp_warning(enable=False) # Suppress warning about non fsp
actual = api._create_job(name, asset, project, number_of_shots, full_state_projection=False)
actual = api._create_job(name, asset, project, number_of_shots,
backend_type_sim, full_state_projection=False)
self.assertDictEqual(expected, actual)
# Verify that no warning was printed
print_string = mock_stdout.getvalue()
self.assertTrue(len(print_string) == 0)

api.show_fsp_warning(enable=True) # Enable warning about non fsp
actual = api._create_job(name, asset, project, number_of_shots, full_state_projection=False)
actual = api._create_job(name, asset, project, number_of_shots,
backend_type_hw, full_state_projection=False)
self.assertDictEqual(expected, actual)
# Verify warning. None on hw backend
print_string = mock_stdout.getvalue()
self.assertTrue(len(print_string) == 0)

api.show_fsp_warning(enable=True) # Enable warning about non fsp
actual = api._create_job(name, asset, project, number_of_shots,
backend_type_sim, full_state_projection=False)
self.assertDictEqual(expected, actual)
# Verify warning
print_string = mock_stdout.getvalue()
Expand All @@ -533,6 +549,9 @@ def test_create_job_has_correct_input_and_output_with_fsp(self):
name = 'TestJob'
asset = {'url': 'https://api.quantum-inspire.com/assets/1/'}
project = {'backend_type': 'https://api.quantum-inspire.com/backendtypes/1/'}
backend_type_sim = {'url': 'https://api.quantum-inspire.com/backendtypes/1/',
'name': 'QX Single-node Simulator',
'is_hardware_backend': False}
number_of_shots = 1
expected_payload = {
'status': 'NEW',
Expand All @@ -546,13 +565,16 @@ def test_create_job_has_correct_input_and_output_with_fsp(self):
expected = self.__mock_job_handler(expected_payload, 'create', None, None, ['test', 'create'], expected_payload)
self.coreapi_client.handlers['jobs'] = partial(self.__mock_job_handler, expected_payload, 'create')
api = QuantumInspireAPI('FakeURL', self.authentication, coreapi_client_class=self.coreapi_client)
actual = api._create_job(name, asset, project, number_of_shots, full_state_projection=True)
actual = api._create_job(name, asset, project, number_of_shots, backend_type_sim, full_state_projection=True)
self.assertDictEqual(expected, actual)

def test_create_job_raises_api_error(self):
name = 'CreateJobFail'
asset = {'url': 'https://api.quantum-inspire.com/assets/1/'}
project = {'backend_type': 'https://api.quantum-inspire.com/backendtypes/1/'}
backend_type_sim = {'url': 'https://api.quantum-inspire.com/backendtypes/1/',
'name': 'QX Single-node Simulator',
'is_hardware_backend': False}
number_of_shots = 1
payload = {
'status': 'NEW',
Expand All @@ -565,7 +587,8 @@ def test_create_job_raises_api_error(self):
}
self.coreapi_client.handlers['jobs'] = partial(self.__mock_job_handler, payload, 'create')
api = QuantumInspireAPI('FakeURL', self.authentication, coreapi_client_class=self.coreapi_client)
self.assertRaises(ApiError, api._create_job, name, asset, project, number_of_shots, full_state_projection=True)
self.assertRaises(ApiError, api._create_job, name, asset, project, number_of_shots,
backend_type_sim, full_state_projection=True)

def __mock_list_results_handler(self, mock_api, document, keys, params=None, validate=None,
overrides=None, action=None, encoding=None, transform=None):
Expand Down

0 comments on commit 1397233

Please sign in to comment.