Repository: qiskit-community/prototype-zne (language: python)

Issue:
Allow bypassing ZNE functionality from `run()`
<!-- ⚠️ If you do not respect this template, your issue will be closed -->
<!-- ⚠️ Make sure to browse the opened and closed issues to confirm this idea does not exist. -->

### What is the expected enhancement?
<!-- Please, provide a clear and concise description of the expected behavior for this enhancement. -->
With the current implementation, a default `zne_strategy` can be configured on `__init__()`, or by accessing the object's attribute by the same name. If that is the case, when `zne_strategy=None` is provided in `run()` the default will apply. 

If said default is equivalent to applying no ZNE this is a way of bypassing the functionality, but, if it is not, then we would need to provide a no-op `zne_strategy` to achieve this behavior; which can be cumbersome.

This enhancement consists on bypassing the ZNE functionality in a simpler way. Additionally, we suggest adding a `noop()` class method to `ZNEStrategy` in order to quickly build a no-op `zne_strategy` object.


Discussion / hints:

Fix patch:
diff --git a/zne/meta/run.py b/zne/meta/run.py
index 1915adb..afd8fb0 100644
--- a/zne/meta/run.py
+++ b/zne/meta/run.py
@@ -38,12 +38,14 @@ def _zne_run(
         circuits: tuple[QuantumCircuit, ...],
         observables: tuple[BaseOperator | PauliSumOp, ...],
         parameter_values: tuple[tuple[float, ...], ...],
-        zne_strategy: ZNEStrategy | None = None,
+        zne_strategy: ZNEStrategy | None = ...,  # type: ignore
         **run_options,
     ) -> Job:
         # Strategy
-        if zne_strategy is None:
+        if zne_strategy is Ellipsis:
             zne_strategy = self.zne_strategy
+        elif zne_strategy is None:
+            zne_strategy = ZNEStrategy.noop()
         elif not isinstance(zne_strategy, ZNEStrategy):
             raise TypeError("Invalid zne_strategy object, expected ZNEStrategy.")
 


Test patch:
diff --git a/test/meta/test_run.py b/test/meta/test_run.py
index 5e5614a..af720f2 100644
--- a/test/meta/test_run.py
+++ b/test/meta/test_run.py
@@ -36,14 +36,16 @@ def run_options(_self):
     ################################################################################
     ## TESTS
     ################################################################################
-    def test_base_run_no_zne_strategy(_self, self, run_options):
+    def test_base_run_noop_zne_strategy(_self, self, run_options):
         base_run = Mock()
         run = zne_run(base_run)
+        self.zne_strategy = ZNEStrategy(noise_factors=range(1, 4))
         _ = run(
             self,
             circuits="circuits",
             observables="observables",
             parameter_values="parameter_values",
+            zne_strategy=None,
             **run_options,
         )
         base_run.assert_called_once_with(