code: def calculate_sv_bins(*items):
      
      calcfns = {"cnvkit": _calculate_sv_bins_cnvkit, "gatk-cnv": _calculate_sv_bins_gatk}
      from bcbio.structural import cnvkit
      items = [utils.to_single_data(x) for x in cwlutils.handle_combined_input(items)]
      if all(not cnvkit.use_general_sv_bins(x) for x in items):
          return [[d] for d in items]
      out = []
      for i, cnv_group in enumerate(_group_by_cnv_method(multi.group_by_batch(items, False))):
          size_calc_fn = MemoizedSizes(cnv_group.region_file, cnv_group.items).get_target_antitarget_bin_sizes
          for data in cnv_group.items:
              if cnvkit.use_general_sv_bins(data):
                  target_bed, anti_bed, gcannotated_tsv = calcfns[cnvkit.bin_approach(data)](data, cnv_group,
                                                                                             size_calc_fn)
                  if not data.get("regions"):
                      data["regions"] = {}
                  data["regions"]["bins"] = {"target": target_bed, "antitarget": anti_bed, "group": str(i),
                                             "gcannotated": gcannotated_tsv}
              out.append([data])
      if not len(out) == len(items):
          raise AssertionError("Inconsistent samples in and out of SV bin calculation:\nout: %s\nin : %s" %
                               (sorted([dd.get_sample_name(utils.to_single_data(x)) for x in out]),
                                sorted([dd.get_sample_name(x) for x in items])))
      return out
docs: Determine bin sizes and regions to use for samples.
  
      Unified approach to prepare regional bins for coverage calculations across
      multiple CNV callers. Splits into target and antitarget regions allowing
      callers to take advantage of both. Provides consistent target/anti-target
      bin sizes across batches.
  
      Uses callable_regions as the access BED file and mosdepth regions in
      variant_regions to estimate depth for bin sizes.