code: def test_invalid_mutation_values_arent_accepted(self):
      func = rosen
      mutation = (0.5, 3)
      assert_raises(
          ValueError,
          DifferentialEvolutionSolver,
          func,
          self.bounds,
          mutation=mutation,
      )
  
      mutation = (-1, 1)
      assert_raises(
          ValueError,
          DifferentialEvolutionSolver,
          func,
          self.bounds,
          mutation=mutation,
      )
  
      mutation = (0.1, np.nan)
      assert_raises(
          ValueError,
          DifferentialEvolutionSolver,
          func,
          self.bounds,
          mutation=mutation,
      )
  
      mutation = 0.5
      solver = DifferentialEvolutionSolver(
          func, self.bounds, mutation=mutation
      )
      assert_equal(0.5, solver.scale)
      assert_equal(None, solver.dither)
  
imports: import multiprocessing
  import platform
  from scipy.optimize._differentialevolution import DifferentialEvolutionSolver, _ConstraintWrapper
  from scipy.optimize import differential_evolution
  from scipy.optimize._constraints import Bounds, NonlinearConstraint, LinearConstraint
  from scipy.optimize import rosen
  from scipy.sparse import csr_matrix
  from scipy._lib._pep440 import Version
  import numpy
  from numpy.testing import assert_equal, assert_allclose, assert_almost_equal, assert_array_equal, assert_string_equal, assert_, suppress_warnings
  from pytest import raises, warns
  import pytest
label_desc: Use image node_id 10 for calling the TestDifferentialEvolutionSolver obj's underlying member method code with example usage: obj.test_invalid_mutation_values_arent_accepted() without return types