cma optimizer ignores bounds silently
**Describe the bug**
When passing bounds to the `cma` optimizer, they are silently ignored.

**To Reproduce**
Simply call `optimize` with the `bounds` keyword and the `cma` method. The bounds are not passed down:

https://github.com/qiboteam/qibo/blob/4ed2fe67bd4b72f7394a13f1beaf5f1f270a5646/src/qibo/optimizers.py#L79

**Expected behavior**
Since the documentation specifies that the bounds are for scipy optimizers, I believe it should either return an error:

`The keyword "bounds" cannot be used with the cma optimizer. Please use options = {"bounds": <bound definition>} instead as defined by the cma documentation` (or something on that line, the cma documentation is not very prolific so not sure about how to reference it...).

Or manually put the `bounds` inside the `options` passed to the `cma`. However this might be tricky as the format I think is not the same as `scipy`.

Bounds from scipy: https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.Bounds.html
Bounds from cma: https://github.com/CMA-ES/pycma/blob/master/notebooks/notebook-usecases-basics.ipynb
diff --git a/src/qibo/optimizers.py b/src/qibo/optimizers.py
index 35b84024..c9208e16 100644
--- a/src/qibo/optimizers.py
+++ b/src/qibo/optimizers.py
@@ -1,3 +1,6 @@
+from qibo.config import log, raise_error
+
+
 def optimize(
     loss,
     initial_parameters,
@@ -76,6 +79,11 @@ def optimize(
             circuit.set_parameters(params)
     """
     if method == "cma":
+        if bounds is not None:  # pragma: no cover
+            raise_error(
+                RuntimeError,
+                "The keyword 'bounds' cannot be used with the cma optimizer. Please use 'options' instead as defined by the cma documentation: ex. options['bounds'] = [0.0, 1.0].",
+            )
         return cmaes(loss, initial_parameters, args, options)
     elif method == "sgd":
         if backend is None:
@@ -226,8 +234,6 @@ def sgd(loss, initial_parameters, args=(), options=None, compile=False, backend=
             - ``'nmessage'`` (int, default: ``1e3``): Every how many epochs to print
               a message of the loss function.
     """
-    from qibo.config import log, raise_error
-
     if not backend.name == "tensorflow":
         raise_error(RuntimeError, "SGD optimizer requires Tensorflow backend.")
 
['src/qibo/optimizers.py']