code: def crossover_2point_bit(self):
      Chrom, size_pop, len_chrom = (
          self.Chrom,
          self.size_pop,
          self.len_chrom,
      )
      half_size_pop = int(size_pop / 2)
      Chrom1, Chrom2 = Chrom[:half_size_pop], Chrom[half_size_pop:]
      mask = torch.zeros(
          size=(half_size_pop, len_chrom),
          dtype=torch.int8,
          device=self.device,
      )
      for i in range(half_size_pop):
          n1, n2 = np.random.randint(0, self.len_chrom, 2)
          if n1 > n2:
              n1, n2 = n2, n1
          mask[i, n1:n2] = 1
      mask2 = (Chrom1 ^ Chrom2) & mask
      Chrom1 ^= mask2
      Chrom2 ^= mask2
      return self.Chrom
  
label_desc: Use image node_id 1 for calling a global function with example usage: crossover_2point_bit() and returns: self