def get_bayes_factor_scvi(cset_a,
                          cset_b,
                          sampling_n,
                          cells_sampled,
                          use_is,
                          force_batch=None):
    subset_a = np.random.choice(cset_a, cells_sampled)
    subset_b = np.random.choice(cset_b, cells_sampled)
    posterior_a = trainer.create_posterior(trainer.model,
                                           gene_dataset,
                                           indices=subset_a)
    posterior_b = trainer.create_posterior(trainer.model,
                                           gene_dataset,
                                           indices=subset_b)
    px_scale_a, log_ratios_a, labels_a = posterior_a.differential_expression_stats(
        M_sampling=sampling_n, force_batch=force_batch)
    px_scale_b, log_ratios_b, labels_b = posterior_b.differential_expression_stats(
        M_sampling=sampling_n, force_batch=force_batch)
    px_scale = np.concatenate((px_scale_a, px_scale_b), axis=1)
    log_ratios = np.concatenate((log_ratios_a, log_ratios_b), axis=1)
    labels_de = np.concatenate((0 * labels_a, 0 * labels_b + 1), axis=0)
    return get_IS_bayes_factors(px_scale,
                                log_ratios,
                                labels_de,
                                0,
                                other_cell_idx=1,
                                importance_sampling=use_is,
                                permutation=False)
                    cell_type[1], batch, nsamples).cpu())
            px_scale_b = px_scale_b[np.newaxis, :]
        return px_scale_a, px_scale_b

    px_scale_a0, px_scale_b0 = scanvi_generate_scale(trainer_scanvi,
                                                     scanvi_labels,
                                                     use_agg_post,
                                                     couple_celltypes, 0,
                                                     n_cells, n_samples)
    labels_de = np.concatenate((np.zeros(
        (px_scale_a0.shape[1], )), np.ones((px_scale_b0.shape[1], ))))
    px_scale_0 = np.concatenate((px_scale_a0, px_scale_b0), axis=1)
    bayes_scanviAB1 = get_IS_bayes_factors(px_scale_0,
                                           None,
                                           labels_de,
                                           0,
                                           other_cell_idx=1,
                                           importance_sampling=False,
                                           permutation=False)

    px_scale_a1, px_scale_b1 = scanvi_generate_scale(trainer_scanvi,
                                                     scanvi_labels,
                                                     use_agg_post,
                                                     couple_celltypes, 1,
                                                     n_cells, n_samples)
    labels_de = np.concatenate((np.zeros(
        (px_scale_a0.shape[1], )), np.ones((px_scale_b0.shape[1], ))))
    px_scale_1 = np.concatenate((px_scale_a1, px_scale_b1), axis=1)
    bayes_scanviAB2 = get_IS_bayes_factors(px_scale_1,
                                           None,
                                           labels_de,