code: def sampler(self) -> sequences.Sampler:
      if self._sampler_instance is None:
          budget = (
              None
              if self.budget is None
              else self.budget - self.middle_point
          )
          samplers = {
              "Halton": sequences.HaltonSampler,
              "Hammersley": sequences.HammersleySampler,
              "LHS": sequences.LHSSampler,
              "Random": sequences.RandomSampler,
          }
          internal_budget = (
              (budget + 1) // 2
              if budget
              and (
                  self.opposition_mode
                  in ["quasi", "special", "opposite"]
              )
              else budget
          )
          self._sampler_instance = samplers[self._sampler](
              self.dimension,
              internal_budget,
              scrambling=self.scrambled,
              random_state=self._rng,
          )
          assert self._sampler_instance is not None
          if self.rescaled:
              self._rescaler = sequences.Rescaler(self.sampler)
              self._sampler_instance.reinitialize()  # sampler was consumed by the scaler
      return self._sampler_instance
  
imports: import copy
  import numpy
  from scipy.spatial import ConvexHull
  import nevergrad.common.typing
  from nevergrad.parametrization import parameter
  from nevergrad.parametrization import transforms
  from .None import sequences
  from .None import base
  from .base import IntOrParameter
  from .None import utils
label_desc: Use image node_id 2 for calling the _SamplingSearch obj's underlying member method code with example usage: obj.sampler() and returns: self