From 5120487bb3563be69ee736a6d9abcdf6c501fd9e Mon Sep 17 00:00:00 2001 From: Juan Gomez Date: Mon, 6 May 2019 12:37:38 +0200 Subject: [PATCH 1/5] Fixes noise_model serialization if it's coming from backend options instead of method parameter --- qiskit/providers/ibmq/utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/qiskit/providers/ibmq/utils.py b/qiskit/providers/ibmq/utils.py index 7381b8205..e792db6d0 100644 --- a/qiskit/providers/ibmq/utils.py +++ b/qiskit/providers/ibmq/utils.py @@ -33,9 +33,11 @@ def update_qobj_config(qobj, backend_options=None, noise_model=None): # Append backend options to configuration. if backend_options: for key, val in backend_options.items(): + if key == 'noise_model': + val = val.as_dict(serializable=True) config[key] = val - # Append noise model to configuration. + # Append noise model to configuration. Overwrites backend option if noise_model: config['noise_model'] = noise_model.as_dict(serializable=True) From 5c6cf021cf837a8146db4585446dfc7ab92301ed Mon Sep 17 00:00:00 2001 From: Juan Gomez Date: Mon, 6 May 2019 14:49:38 +0200 Subject: [PATCH 2/5] Create a transformation function for serializing noise model --- qiskit/providers/ibmq/utils.py | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/qiskit/providers/ibmq/utils.py b/qiskit/providers/ibmq/utils.py index e792db6d0..7bdd22da0 100644 --- a/qiskit/providers/ibmq/utils.py +++ b/qiskit/providers/ibmq/utils.py @@ -16,6 +16,29 @@ from qiskit.qobj import QobjHeader +def _serialize_noise_model(config): + """Traverse the dictionary looking for noise_model keys and apply + a transformation so it can be serialized. + + Args: + config (dict): The dictionary to traverse + + Returns: + config (dict): The transformed dictionary + """ + for k, v in config.items(): + if isinstance(config[k], dict): + _serialize_noise_model(config[k]) + else: + if k == 'noise_model': + try: + config[k] = v.as_dict(serializable=True) + except AttributeError: + # if .as_dict() fails is probably because the noise_model + # has been already transformed elsewhere + pass + + return config def update_qobj_config(qobj, backend_options=None, noise_model=None): """Update a Qobj configuration from options and noise model. @@ -33,13 +56,14 @@ def update_qobj_config(qobj, backend_options=None, noise_model=None): # Append backend options to configuration. if backend_options: for key, val in backend_options.items(): - if key == 'noise_model': - val = val.as_dict(serializable=True) config[key] = val # Append noise model to configuration. Overwrites backend option if noise_model: - config['noise_model'] = noise_model.as_dict(serializable=True) + config['noise_model'] = noise_model + + # Look for noise_models in the config, and try to transform them + config = _serialize_noise_model(config) # Update the Qobj configuration. qobj.config = QobjHeader.from_dict(config) From 156fe716420a374c99d5c3f1d7a1c0167601b631 Mon Sep 17 00:00:00 2001 From: Juan Gomez Date: Mon, 6 May 2019 15:05:56 +0200 Subject: [PATCH 3/5] Making linter happy --- qiskit/providers/ibmq/utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/qiskit/providers/ibmq/utils.py b/qiskit/providers/ibmq/utils.py index 7bdd22da0..0b80079c2 100644 --- a/qiskit/providers/ibmq/utils.py +++ b/qiskit/providers/ibmq/utils.py @@ -16,6 +16,7 @@ from qiskit.qobj import QobjHeader + def _serialize_noise_model(config): """Traverse the dictionary looking for noise_model keys and apply a transformation so it can be serialized. @@ -40,6 +41,7 @@ def _serialize_noise_model(config): return config + def update_qobj_config(qobj, backend_options=None, noise_model=None): """Update a Qobj configuration from options and noise model. From f9d53564d9174cc0fc0fad0fada3dcd353aa5c88 Mon Sep 17 00:00:00 2001 From: Juan Gomez Date: Mon, 6 May 2019 15:21:25 +0200 Subject: [PATCH 4/5] Lintering --- qiskit/providers/ibmq/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qiskit/providers/ibmq/utils.py b/qiskit/providers/ibmq/utils.py index 0b80079c2..5f5ee4be6 100644 --- a/qiskit/providers/ibmq/utils.py +++ b/qiskit/providers/ibmq/utils.py @@ -25,7 +25,7 @@ def _serialize_noise_model(config): config (dict): The dictionary to traverse Returns: - config (dict): The transformed dictionary + dict: The transformed dictionary """ for k, v in config.items(): if isinstance(config[k], dict): From baa882d682d45cc8fcd7910b6a5b434aae1929a2 Mon Sep 17 00:00:00 2001 From: "Diego M. Rodriguez" Date: Mon, 6 May 2019 15:31:13 +0200 Subject: [PATCH 5/5] Update CHANGELOG --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 8cb7c4f37..603fb227f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -33,6 +33,7 @@ Fixed """"" - Fixed incorrect parsing of some API hub URLs (#77). +- Fixed noise model handling for remote simulators (#84). `0.1.1`_ - 2019-05-01