def test_lipid_abbreviation(): l = Lipid(LipidClass('CE'), ResidueList([Residue(16, 2)])) assert l.abbreviation() == 'CE(16:2)' l = Lipid(LipidClass('CE'), ResidueList([Residue(16, 2), Residue(18, 1)])) assert l.abbreviation() == 'CE(16:2/18:1)' assert l.abbreviation(summed=True) == 'CE(34:3)' l = Lipid( LipidClass('CE'), ResidueList([ Residue(16, 2, modification=ResidueModification('O-')), Residue(18, 1) ])) assert l.abbreviation() == 'CE(O-16:2/18:1)' assert l.abbreviation(summed=True) == 'CE(O-34:3)' # no residues, assure that abbreviation/summed fails with AttributeError l = Lipid(LipidClass('CE')) assert l.abbreviation() == 'CE' assert l.abbreviation(summed=True) == 'CE'
def some_lipids_plain_list(): """ A handful of well formatted lipids, using all annotation elements. Return as Python list, not as LipidList Object """ # lists of names to draw from lipidclass_names = ['CE', 'Cer', 'TG'] modifications = ['d', 'O-', None, None] lipidlist = [] for i in range(10): lipidclass = LipidClass(random.choice(lipidclass_names)) num_of_residues = random.choice([1, 2, 3]) residuelist = ResidueList() for i in range(0, num_of_residues): residuelist.residues.append( Residue(random.randint(6, 50), random.randint(0, 10), modification=ResidueModification( random.choice(modifications)))) lipidlist.append(Lipid(lipidclass, residuelist)) return lipidlist
def test_residuelist_sum(): r1 = Residue(18, 2) r2 = Residue(12, 3) residuelist = ResidueList([r1, r2]) assert residuelist.total_double_bonds == 5 assert residuelist.total_carbon_atoms == 30
def parse(cls, string: str) -> Lipid: """ Parse a string represntation of a lipid and create Lipid class. :param string: The input string. :return: An instance of Lipid """ # TODO refactor, too much code repeated in the two if blocks # identify abbreviation type if '(' in string and ')' in string: string = string.strip() if not string.endswith(')'): raise TypeError(f"Cannot parse abbreviation {string}") lipid_class_name = string.split('(', 1)[0] # second part of split at first ( is residue string, add leading ( again! residue_string = '(' + string.split('(', 1)[1] lipidclass = LipidClass.parse(lipid_class_name) residuelist = ResidueList.parse(residue_string) lipid = cls(lipidclass, residuelist) lipid._input = string return lipid # CE 22:4;0 elif ' ' in string: lipid_class_name, residue_string = string.split(' ', 1) lipidclass = LipidClass.parse(lipid_class_name) residuelist = ResidueList.parse(residue_string) lipid = cls(lipidclass, residuelist) lipid._input = string return lipid else: lipid = Lipid(LipidClass(string)) lipid._input = string return lipid
def test_lipid_check_consistency(): l = Lipid(LipidClass('Cer'), ResidueList([Residue(16, 2), Residue(18, 1)])) # check inconsistent state assert l.residueslist[0].modification == None l.check_consistency() # check consistent state assert l.residueslist[0].modification == CLASS_DEFAULT_MODIFICATION['Cer']
def test_residuelist_parse(): test_string = '18:1;0_19:1;0' residuelist = ResidueList.parse(test_string) assert len(residuelist) == 2 assert residuelist[0].carbon_atoms == 18 assert residuelist[0].double_bonds == 1 assert residuelist[0].oxidation == 0 assert residuelist[1].carbon_atoms == 19 assert residuelist[1].double_bonds == 1 assert residuelist[1].oxidation == 0 test_string = '18:1_19:1' residuelist = ResidueList.parse(test_string) assert len(residuelist) == 2 assert residuelist[0].carbon_atoms == 18 assert residuelist[0].double_bonds == 1 assert residuelist[0].oxidation == None assert residuelist[1].carbon_atoms == 19 assert residuelist[1].double_bonds == 1 assert residuelist[1].oxidation == None test_string = 'O-16:0;0/18:1;0' residuelist = ResidueList.parse(test_string) assert len(residuelist) == 2 assert residuelist[0].carbon_atoms == 16 assert residuelist[0].double_bonds == 0 assert residuelist[0].oxidation == 0 assert residuelist[0].modification.name == 'O-' assert residuelist[1].carbon_atoms == 18 assert residuelist[1].double_bonds == 1 assert residuelist[1].oxidation == 0
def __init__(self, lipidclass: LipidClass = None, residuelist: ResidueList = None, xreflist: XrefList = None): if residuelist: self.residueslist = residuelist else: self.residueslist = ResidueList() self.lipidclass = lipidclass if xreflist: self.xreflist = xreflist else: self.xreflist = XrefList() self._input = None
def test_residuelist_string(): r1 = Residue(18, 2) r2 = Residue(12, 3) residuelist = ResidueList([r1, r2]) assert residuelist.residuelist_string == '18:2/12:3'
def test_residuelist(): residuelist = ResidueList() assert len(residuelist) == 0