code: def twopoints(
      self, donor: np.ndarray, individual: np.ndarray
  ) -> None:
      bounds = sorted(
          self.random_state.choice(
              donor.size + 1, size=2, replace=False
          ).tolist()
      )
      if (
          bounds[1] == donor.size and not bounds[0]
      ):  # make sure there is at least one point crossover
          bounds[
              self.random_state.randint(2)
          ] = self.random_state.randint(1, donor.size)
      if self.random_state.choice([True, False]):
          donor[bounds[0] : bounds[1]] = individual[
              bounds[0] : bounds[1]
          ]
      else:
          donor[: bounds[0]] = individual[: bounds[0]]
          donor[bounds[1] :] = individual[bounds[1] :]
  
imports: import warnings
  import numpy
  import nevergrad.common.typing
  from nevergrad.parametrization import parameter
  from .None import metamodel
  from .None import base
  from .None import oneshot
label_desc: Use image node_id 5 for calling the Crossover obj's underlying member method code with example usage: obj.twopoints(donor, individual) without return types