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
  from scipy.optimize import _differentialevolution
  from scipy.optimize._differentialevolution import DifferentialEvolutionSolver
  from scipy.optimize import differential_evolution
  import numpy
  from scipy.optimize import rosen
  from numpy.testing import assert_equal, assert_allclose, assert_almost_equal, assert_string_equal, assert_
  from pytest import raises, warns
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