def poa(groups, max_sequences_per_poa=100, gpu_mem_per_batch=0.9): """ Generate consensus for POA groups. Args: groups : A list of lists of sequences for which consensus is to be generated. """ free, total = cuda.cuda_get_mem_info(cuda.cuda_get_device()) gpu_mem_per_batch *= free batch = CudaPoaBatch(max_sequences_per_poa, gpu_mem_per_batch, stream=None, output_type="consensus") results = [] for i, group in enumerate(groups, start=1): group_status, seq_status = batch.add_poa_group(group) # Once batch is full, run POA processing if group_status == 1 or i == len(groups): batch.generate_poa() consensus, coverage, status = batch.get_consensus() results.extend(consensus) batch.reset() group_status, seq_status = batch.add_poa_group(group) return results
def test_cudapoa_reset_batch(): free, total = cuda.cuda_get_mem_info(cuda.cuda_get_device()) batch = CudaPoaBatch(10, 0.9 * free) poa_1 = ["ACTGACTG", "ACTTACTG", "ACGGACTG", "ATCGACTG"] batch.add_poa_group(poa_1) batch.generate_poa() consensus, coverage, status = batch.get_consensus() assert(batch.total_poas == 1) batch.reset() assert(batch.total_poas == 0)