def test_group_by(self): # verify grouping logic grouped = iters.group_by(len, ['1', '12', 'a', '123', 'ab']) self.assertEqual({1: ['1', 'a'], 2: ['12', 'ab'], 3: ['123']}, grouped) # verify it works with any iterable - not only lists def gen(): yield '1' yield '12' grouped = iters.group_by(len, gen()) self.assertEqual({1: ['1'], 2: ['12']}, grouped)
def test_group_by(self): # verify grouping logic grouped = iters.group_by(len, ["1", "12", "a", "123", "ab"]) self.assertEqual({1: ["1", "a"], 2: ["12", "ab"], 3: ["123"]}, grouped) # verify it works with any iterable - not only lists def gen(): yield "1" yield "12" grouped = iters.group_by(len, gen()) self.assertEqual({1: ["1"], 2: ["12"]}, grouped)
import json import operator as op from typing import NamedTuple, Optional import requests from Bio.Data import CodonTable from fn.iters import group_by REQUEST = "https://www.ebi.ac.uk/proteins/api/coordinates/location/{prot}:{pos}" _REVMAP = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} _STDTABLE = CodonTable.unambiguous_dna_by_id[1] STDCODE = { acid: [codon for codon, _ in pairs] for acid, pairs in group_by(op.itemgetter(1), _STDTABLE.forward_table.items()).items() } _MITOTABLE = CodonTable.unambiguous_dna_by_id[2] MITOCODE = { acid: [codon for codon, _ in pairs] for acid, pairs in group_by(op.itemgetter(1), _MITOTABLE.forward_table.items()).items() } Codon = NamedTuple('Region', [('contig', str), ('transcript', str), ('forward', bool), ('number', int), ('start', int), ('stop', int), ('tstart', int), ('tstop', int)]) _extract_location = op.itemgetter('chromosome', 'ensemblTranslationId', 'geneStart', 'geneEnd')