Conditions | 11 |
Total Lines | 94 |
Lines | 0 |
Ratio | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
Complex classes like test_ipyrelatonships_in_the_go() often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
1 | #!/usr/bin/env python |
||
11 | def test_ipyrelatonships_in_the_go(): |
||
12 | """Command-line test for notebooks/relatonships_in_the_go.ipynb.""" |
||
13 | # Loading GO graph with the relationship tags |
||
14 | repo = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..") |
||
15 | godag = get_godag(os.path.join(repo, "go-basic.obo"), optional_attrs=['relationship']) |
||
16 | |||
17 | print("\n## Viewing relationships in the GO graph") |
||
18 | eg_term = godag['GO:1901990'] |
||
19 | print(set([eg_term])) |
||
20 | # relationship_rev: 0 items |
||
21 | # name:regulation of mitotic cell cycle phase transition |
||
22 | # relationship: 1 items |
||
23 | # regulates: 1 items |
||
24 | # GO:0044772 level-04 depth-04 mitotic cell cycle phase transition [biological_process] |
||
25 | # level:6 |
||
26 | # is_obsolete:False |
||
27 | # namespace:biological_process |
||
28 | # id:GO:1901990 |
||
29 | # reldepth:7 |
||
30 | # depth:7 |
||
31 | # parents: 2 items |
||
32 | # GO:1901987 level-06 depth-06 regulation of cell cycle phase transition [biological_process] |
||
33 | # GO:0007346 level-05 depth-05 regulation of mitotic cell cycle [biological_process] |
||
34 | # children: 6 items |
||
35 | # GO:0010389 level-07 depth-08 regulation of G2/M transition of mitotic cell cycle [biological_process] |
||
36 | # GO:2000045 level-07 depth-08 regulation of G1/S transition of mitotic cell cycle [biological_process] |
||
37 | # GO:0007096 level-07 depth-08 regulation of exit from mitosis [biological_process] |
||
38 | # GO:0030071 level-07 depth-10 regulation of mitotic metaphase/anaphase transition [biological_process] |
||
39 | # GO:1901991 level-07 depth-08 negative regulation of mitotic cell cycle phase transition [biological_process] |
||
40 | # GO:1901992 level-07 depth-08 positive regulation of mitotic cell cycle phase transition [biological_process] |
||
41 | # _parents: 2 items |
||
42 | # GO:1901987 |
||
43 | # GO:0007346 |
||
44 | # alt_ids: 0 items]) |
||
45 | |||
46 | |||
47 | print("\n## Relationship dictionary") |
||
48 | print(eg_term.relationship.keys()) |
||
49 | print(eg_term.relationship['regulates']) |
||
50 | |||
51 | ## Example use case: GO:0007124 |
||
52 | # |
||
53 | # $ prt_terms GO:0007124 |
||
54 | # [Term] |
||
55 | # id: GO:0007124 |
||
56 | # name: pseudohyphal growth |
||
57 | # namespace: biological_process |
||
58 | # def: "A pattern of cell growth that occurs in conditions of nitrogen limitation |
||
59 | # and abundant fermentable carbon source. Cells become elongated, switch to a |
||
60 | # unipolar budding pattern, remain physically attached to each other, and invade |
||
61 | # the growth substrate." [GOC:krc, PMID:11104818] |
||
62 | # subset: goslim_candida |
||
63 | # subset: goslim_yeast |
||
64 | # is_a: GO:0016049 ! cell growth |
||
65 | # is_a: GO:0070783 ! growth of unicellular organism as a thread of attached cells |
||
66 | term_of_interest = godag['GO:0007124'] |
||
67 | |||
68 | # First, find the relationship types which contain "regulates": |
||
69 | regulates = frozenset([typedef |
||
70 | for typedef in godag.typedefs.keys() |
||
71 | if 'regulates' in typedef]) |
||
72 | print(regulates) |
||
73 | assert regulates == frozenset(['regulates', 'negatively_regulates', 'positively_regulates']) |
||
74 | |||
75 | # Now search through the terms in the tree for those with a relationship in |
||
76 | # this list and add them to a dictionary dependent on the type of regulation. |
||
77 | regulating_terms = defaultdict(list) |
||
78 | for goterm in godag.values(): |
||
79 | if hasattr(goterm, 'relationship'): |
||
80 | for typedef in regulates.intersection(goterm.relationship.keys()): |
||
81 | if term_of_interest in goterm.relationship[typedef]: |
||
82 | regulating_terms['{:s}d_by'.format(typedef[:-1])].append(goterm) |
||
83 | |||
84 | # Now regulating_terms contains the GO terms which relate to regulating |
||
85 | # protein localization to the nucleolus. |
||
86 | |||
87 | # pseudohyphal growth (GO:0007124) is: |
||
88 | # |
||
89 | # - negatively_regulated_by: |
||
90 | # -- GO:2000221 negative regulation of pseudohyphal growth |
||
91 | # |
||
92 | # - regulated_by: |
||
93 | # -- GO:2000220 regulation of pseudohyphal growth |
||
94 | # |
||
95 | # - positively_regulated_by: |
||
96 | # -- GO:2000222 positive regulation of pseudohyphal growth |
||
97 | # |
||
98 | print('{:s} ({:s}) is:'.format(term_of_interest.name, term_of_interest.id)) |
||
99 | for reg_desc, goterms in regulating_terms.items(): |
||
100 | print('\n - {:s}:'.format(reg_desc)) |
||
101 | for goterm in goterms: |
||
102 | print(' -- {:s} {:s}'.format(goterm.id, goterm.name)) |
||
103 | for gochild in goterm.children: |
||
104 | print(' -- {:s} {:s}'.format(gochild.id, gochild.name)) |
||
105 | |||
125 |