code: def apply(self, donor: np.ndarray, individual: np.ndarray) -> None:
      dim = donor.size
      if self.crossover == "twopoints" and dim >= 4:
          return self.twopoints(donor, individual)
      elif self.crossover == "rotated_twopoints" and dim >= 4:
          return self.rotated_twopoints(donor, individual)
      elif self.crossover == "onepoint" and dim >= 3:
          return self.onepoint(donor, individual)
      elif self.crossover == "voronoi":
          return self.voronoi(donor, individual)
      else:
          return self.variablewise(donor, individual)
  
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 2 for calling the Crossover obj's underlying member method code with example usage: obj.apply(donor, individual) and returns: self, self, self, self, self