def compute_lisi(A,
                 B,
                 combined_meta,
                 batch_key,
                 cell_type_key,
                 aligner_fcn,
                 do_B_transform=False):
    A = aligner_fcn(A)
    if do_B_transform:
        B = aligner_fcn(B)
    X = np.concatenate((A, B))
    print(X.shape)
    assert (X.shape[0] == combined_meta.shape[0])
    return metrics.lisi2(X, combined_meta, [batch_key, cell_type_key])
    # For each alignment method
    for i, method in enumerate(args.methods):
        print('\t{}'.format(method))
        method_key = '{}_aligned'.format(method)
        log_dir = join(log_dir_root, '{}_{}'.format(task.as_path(), method))
        if not exists(log_dir):
            makedirs(log_dir)

        if method == 'None':
            pass
            #
            plot_alignment_results(log_dir, task_adata, method, task)
            lisi_scores.append(
                metrics.lisi2(task_adata.obsm['PCA'],
                              task_adata.obs, [task.batch_key, task.ct_key],
                              perplexity=30))
        else:
            if 'ICP' in method:
                runners.run_ICP_methods(datasets, task, task_adata, method,
                                        log_dir, args)
                #lisi_scores.append(metrics.lisi2(task_adata.obsm[method_key], task_adata.obs, [task.batch_key, task.ct_key], perplexity=30)
            elif method == 'ScAlign':
                runners.run_scAlign(datasets, task, task_adata, method,
                                    log_dir, args)
            elif method == 'MNN':
                runners.run_MNN(datasets, task, task_adata, method, log_dir,
                                args)
            elif method == 'SeuratV3':
                #task_adata = datasets[task.ds_key]
                runners.run_Seurat(datasets, task, task_adata, method, log_dir,
            

        if task.leave_out_ct is not None:
            task_idx = (datasets[task.ds_key].obs[task.batch_key] == task.source_batch) | ((datasets[task.ds_key].obs[task.batch_key] == task.target_batch) & (datasets[task.ds_key].obs[task.ct_key] != task.leave_out_ct))
        # elif task.leave_out_source_ct is not None:
        #     task_idx = ((datasets[task.ds_key].obs[task.batch_key] == task.source_batch) & (datasets[task.ds_key].obs[task.ct_key] != task.leave_out_source_ct)) | (datasets[task.ds_key].obs[task.batch_key] == task.target_batch)
        else:
            task_idx = (datasets[task.ds_key].obs[task.batch_key] == task.source_batch) | (datasets[task.ds_key].obs[task.batch_key] == task.target_batch)
        task_adata = datasets[task.ds_key][task_idx]
        method_key = '{}_aligned'.format(args.method)

        kbet_stats = None
        if args.method == 'None':
            plot_alignment_results(log_dir, task_adata, args.method, task)
            if args.input_space == 'PCA':
                lisi_score = metrics.lisi2(task_adata.obsm['PCA'], task_adata.obs, [task.batch_key, task.ct_key], perplexity=30)
                # lisi_score_batch = metrics.lisi2(task_adata.obsm['PCA'], task_adata.obs, [task.batch_key], perplexity=30)
                # batch_A_adata = task_adata[task_adata.obs[task.batch_key] == task.source_batch, :]
                # print(f'batch_A_adata.obsm["PCA"].shape: {batch_A_adata.obsm["PCA"].shape}')
                # lisi_score_celltype = metrics.lisi2(batch_A_adata.obsm['PCA'], batch_A_adata.obs, [task.ct_key], perplexity=30)
            else:
                lisi_score = metrics.lisi2(task_adata.X, task_adata.obs, [task.batch_key, task.ct_key], perplexity=30)
                # lisi_score_batch = metrics.lisi2(task_adata.X, task_adata.obs, [task.batch_key], perplexity=30)
                # batch_A_adata = task_adata[task_adata.obs[task.batch_key] == task.source_batch, :]
                # print(f'batch_A_adata.shape: {batch_A_adata.shape}')
                # lisi_score_celltype = metrics.lisi2(batch_A_adata.X, batch_A_adata.obs, [task.ct_key], perplexity=30)
            if args.do_kBET_test:
                try:
                    kbet_stats = metrics.kBET(task_adata.X, task_adata.obs, task.batch_key, args.kBET_env_path)
                    print(kbet_stats)
                    print('kBET medians:')