Repository: dwavesystems/dwave-cloud-client

Issue:
Expose lower_noise solver property
Create a derived property based on solver `tags`.

Discussion:

Patch:
diff --git a/dwave/cloud/solver.py b/dwave/cloud/solver.py
index 35b6221..d04eeec 100644
--- a/dwave/cloud/solver.py
+++ b/dwave/cloud/solver.py
@@ -143,7 +143,8 @@ class Solver(object):
 
         # Derived solver properties (not present in solver data properties dict)
         self.derived_properties = {
-            'qpu', 'software', 'online', 'num_active_qubits', 'avg_load', 'name'
+            'qpu', 'software', 'online', 'num_active_qubits', 'avg_load', 'name',
+            'lower_noise'
         }
 
     def __repr__(self):
@@ -219,6 +220,10 @@ class Solver(object):
         "Nominal number of qubits on chip (includes active AND inactive)."
         return self.properties.get('num_qubits')
 
+    @property
+    def lower_noise(self):
+        return "lower_noise" in self.properties.get("tags", [])
+
     def max_num_reads(self, **params):
         """Returns the maximum number of reads for the given solver parameters.
 


Test patch:
diff --git a/tests/test_client.py b/tests/test_client.py
index f6c3a75..009e167 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -250,7 +250,8 @@ class FeatureBasedSolverSelection(unittest.TestCase):
                 "topology": {
                     "type": "chimera",
                     "shape": [16, 16, 4]
-                }
+                },
+                "tags": ["lower_noise"]
             },
             "id": "solver1",
             "description": "A test solver 1",
@@ -293,7 +294,8 @@ class FeatureBasedSolverSelection(unittest.TestCase):
                 # the following are only present in this solver
                 "some_set": [1, 2],
                 "some_range": [1, 2],
-                "some_string": "x"
+                "some_string": "x",
+                "tags": ["tag"]
             },
             "id": "c4-sw_solver3",
             "description": "A test of software solver",
@@ -339,6 +341,10 @@ class FeatureBasedSolverSelection(unittest.TestCase):
         self.assertSolvers(self.client.get_solvers(num_active_qubits=2), [self.solver3])
         self.assertSolvers(self.client.get_solvers(num_active_qubits__in=[2, 3]), [self.solver1, self.solver3])
 
+    def test_lower_noise_derived_property(self):
+        self.assertSolvers(self.client.get_solvers(lower_noise=True), [self.solver1])
+        self.assertSolvers(self.client.get_solvers(lower_noise=False), [self.solver2, self.solver3])
+
     def test_parameter_availability_check(self):
         self.assertSolvers(self.client.get_solvers(postprocess__available=True), [self.solver1])
         self.assertSolvers(self.client.get_solvers(postprocess=True), [self.solver1])