diff --git a/phylogeny.py b/phylogeny.py index 300751c..59f3e64 100644 --- a/phylogeny.py +++ b/phylogeny.py @@ -17,17 +17,16 @@ '''Phylogeny -- http://rosalind.info/problems/topics/phylogeny/''' -from unittest import TestCase, main, skip -from io import StringIO - -import numpy as np -from Bio.Phylo import read -from rosalind import LabelledTree -from random import randrange +from unittest import TestCase, main, skip +from io import StringIO +import numpy as np +from Bio.Phylo import read +from rosalind import LabelledTree +from random import randrange from scipy.special import comb -from newick import newick_to_adjacency_list, Parser, Tokenizer, Hierarchy -from fasta import FastaContent -from helpers import flatten, expand +from newick import newick_to_adjacency_list, Parser, Tokenizer, Hierarchy +from fasta import FastaContent +from helpers import flatten, expand def CompleteTree(n,adj): @@ -309,10 +308,9 @@ def claim(e1,e2): G1 = e2.B1 G2 = e2.B2 G3 = e2.B3 - A = comb(len(F1.intersection(G1)),2,exact=True) * (len(F2.intersection(G2))*len(F3.intersection(G3))+\ - len(F2.intersection(G3))*len(F3.intersection(G2))) - # print (f'claim {e1},{e2}: {A}') - return A + return comb(len(F1.intersection(G1)),2,exact=True) * \ + ( len(F2.intersection(G2))*len(F3.intersection(G3))+ \ + len(F2.intersection(G3))*len(F3.intersection(G2))) n = len(species) index = {species[i]:i for i in range(n)} diff --git a/rosalind.wpr b/rosalind.wpr index e9f0a3b..59a8eea 100644 --- a/rosalind.wpr +++ b/rosalind.wpr @@ -411,7 +411,7 @@ proj.launch-config = {loc('2sat.py'): ('project', ('--rosalind', '')), loc('qrtd.py'): ('project', - ('--rosalind', + ('--sample', '')), loc('qrtd1.py'): ('project', ('--rosalind', @@ -677,8 +677,8 @@ debug.recent-run-args = {loc('2sat.py'): ['--rosalind', '--sample'], loc('qrt.py'): ['--rosalind', '--sample'], - loc('qrtd.py'): ['--rosalind', - '--sample', + loc('qrtd.py'): ['--sample', + '--rosalind', '--paper --show', '--exercise', '--help', @@ -760,7 +760,7 @@ guimgr.overall-gui-state = {'windowing-policy': 'combined-window', {'tree-state': {'file-sort-method': 'by name', 'list-files-first': False, 'tree-states': {'deep': {'expanded-nodes': [], - 'selected-nodes': [(151,)], + 'selected-nodes': [(157,)], 'top-node': (0,)}}, 'tree-style': 'deep'}}), ('source-assistant', @@ -1476,22 +1476,13 @@ guimgr.overall-gui-state = {'windowing-policy': 'combined-window', 'args')]}, loc('phylogeny.py'): {'expanded-nodes': [[('function def', loc('phylogeny.py'), - 'qrtd')], - [('function def', - loc('phylogeny.py'), - 'qrtd|0|.bryant'), - ('function def', - loc('phylogeny.py'), - 'qrtd|0|.bryant')]], + 'qrtd')]], 'selected-nodes': [[('function def', loc('phylogeny.py'), - 'qrtd|0|.bryant'), - ('function def', - loc('phylogeny.py'), - 'qrtd|0|.bryant')]], + 'qrtd')]], 'top-node': [('function def', loc('phylogeny.py'), - 'create_character')]}, + 'alph')]}, loc('pmch.py'): {'expanded-nodes': [], 'selected-nodes': [], 'top-node': [('generic attribute', @@ -1785,20 +1776,19 @@ guimgr.overall-gui-state = {'windowing-policy': 'combined-window', -1, -1), 'attrib-starts': [], - 'code-line': 'np.left_shift(np.uint32(255), 1)', - 'first-line': 11, + 'code-line': 'from scipy.special import comb', + 'first-line': 8, 'folded-linenos': [], - 'history': {None: ['import timeit\n', - 'timeit.timeit(\'"-".join(str(n) for n in range(100))\', number=10000)\n', - 'timeit.timeit(s=\'"-".join(str(n) for n in range(100))\', number=10000)\n', - 'import numpy as np\n', - 'np.left_shift(np.uint64(255), 1)\n', - 'np.left_shift(np.uint32(255), 1)\n']}, + 'history': {None: ['from scipy.special import comb\n', + 'comb(5,1)\n', + 'comb(5,2)\n', + ',exact=True\n', + 'comb(5,2,exact=True)\n']}, 'launch-id': None, - 'sel-line': 16, - 'sel-line-start': 809, - 'selection_end': 841, - 'selection_start': 841, + 'sel-line': 13, + 'sel-line-start': 382, + 'selection_end': 412, + 'selection_start': 382, 'zoom': 0}), ('messages', 'wide', @@ -1811,306 +1801,312 @@ guimgr.overall-gui-state = {'windowing-policy': 'combined-window', 'toolbox-percent': 1.0, 'toolbox-tree-sel': ''})], 'primary_view_state': {'editor_states': ({'bookmarks': ([[loc('phylogeny.py'), - {'attrib-starts': [('qrtd|0|', - 242)], - 'code-line': " '''\r\n", - 'first-line': 474, + {'attrib-starts': [('PreparedTree|0|', + 276)], + 'code-line': ' return 2*comb(n,2) - 2*sum(claim (e1,e2) for e1 in tree1.edges for e2 in tree2.edges)\r\n', + 'first-line': 305, 'folded-linenos': [], - 'sel-line': 250, - 'sel-line-start': 8135, - 'selection_end': 8142, - 'selection_start': 8142, + 'sel-line': 323, + 'sel-line-start': 10681, + 'selection_end': 10681, + 'selection_start': 10681, 'zoom': 0}, - 1681165456.149274], + 1682047745.0975516], [loc('phylogeny.py'), {'attrib-starts': [('qrtd|0|', - 242)], - 'code-line': " '''\r\n", - 'first-line': 507, + 243), + ('qrtd|0|.PreparedTree|0|', + 273), + ('qrtd|0|.PreparedTree|0|.create_edges|0|', + 289)], + 'code-line': ' else:\r\n', + 'first-line': 294, 'folded-linenos': [], - 'sel-line': 250, - 'sel-line-start': 8135, - 'selection_end': 8142, - 'selection_start': 8142, + 'sel-line': 297, + 'sel-line-start': 9950, + 'selection_end': 9953, + 'selection_start': 9953, 'zoom': 0}, - 1681165467.542872], - [loc('phylogeny.py'), - {'attrib-starts': [('SmallParsimony|0|', - 543), - ('SmallParsimony|0|.SmallParsimonyC|0|', - 557), - ('SmallParsimony|0|.SmallParsimonyC|0|.backtrack|0|', - 624)], - 'code-line': ' Process internal node of tree top down, starting from root\r\n', - 'first-line': 627, + 1682047810.7711248], + [loc('../AppData/Local/Programs/Python/Python311/Lib/unittest/case.py'), + {'attrib-starts': [('TestCase|0|', + 343), + ('TestCase|0|.fail|0|', + 700)], + 'code-line': ' raise self.failureException(msg)\r\n', + 'first-line': 697, 'folded-linenos': [], - 'sel-line': 628, - 'sel-line-start': 20521, - 'selection_end': 20532, - 'selection_start': 20532, + 'sel-line': 702, + 'sel-line-start': 26084, + 'selection_end': 26084, + 'selection_start': 26084, 'zoom': 0}, - 1681165600.199911], - [loc('phylogeny.py'), - {'attrib-starts': [('SmallParsimony|0|', - 543), - ('SmallParsimony|0|.SmallParsimonyC|0|', - 557), - ('SmallParsimony|0|.SmallParsimonyC|0|.backtrack|0|', - 624)], - 'code-line': ' Process internal node of tree top down, starting from root\r\n', - 'first-line': 654, + 1682047813.5426176], + [loc('../AppData/Local/Programs/Python/Python311/Lib/unittest/case.py'), + {'attrib-starts': [('TestCase|0|', + 343), + ('TestCase|0|._baseAssertEqual|0|', + 860)], + 'code-line': ' raise self.failureException(msg)\r\n', + 'first-line': 845, 'folded-linenos': [], - 'sel-line': 628, - 'sel-line-start': 20521, - 'selection_end': 20532, - 'selection_start': 20532, + 'sel-line': 865, + 'sel-line-start': 33596, + 'selection_end': 33596, + 'selection_start': 33596, 'zoom': 0}, - 1681165605.5189316], + 1682047819.1151946], [loc('phylogeny.py'), - {'attrib-starts': [('alph|0|', - 681), - ('alph|0|.create_fixed_alignments|0|', - 696)], - 'code-line': '\r\n', - 'first-line': 696, + {'attrib-starts': [('qrtd|0|', + 243), + ('qrtd|0|.PreparedTree|0|', + 273), + ('qrtd|0|.PreparedTree|0|.create_edges|0|', + 289)], + 'code-line': ' else:\r\n', + 'first-line': 294, 'folded-linenos': [], - 'sel-line': 701, - 'sel-line-start': 23579, - 'selection_end': 23579, - 'selection_start': 23579, + 'sel-line': 297, + 'sel-line-start': 9950, + 'selection_end': 9953, + 'selection_start': 9953, 'zoom': 0}, - 1681165690.116747], - [loc('phylogeny.py'), - {'attrib-starts': [('alph|0|', - 681), - ('alph|0|.create_fixed_alignments|0|', - 696)], - 'code-line': '\r\n', - 'first-line': 873, + 1682047869.8974538], + [loc('qrtd.py'), + {'attrib-starts': [], + 'code-line': 'from helpers import read_strings\r\n', + 'first-line': 21, 'folded-linenos': [], - 'sel-line': 701, - 'sel-line-start': 23579, - 'selection_end': 23579, - 'selection_start': 23579, + 'sel-line': 25, + 'sel-line-start': 1040, + 'selection_end': 1109, + 'selection_start': 1079, 'zoom': 0}, - 1681165705.833685], + 1682048946.085718], [loc('phylogeny.py'), - {'attrib-starts': [('alph|0|', - 681), - ('alph|0|.SmallParsimony|0|', - 717), - ('alph|0|.SmallParsimony|0|.find_ripe|0|', - 741)], - 'code-line': ' Find list of nodes that are ready to be processed\r\n', - 'first-line': 731, + {'attrib-starts': [('qrtd|0|', + 243), + ('qrtd|0|.claim|0|', + 304)], + 'code-line': " # print (f'claim {e1},{e2}: {A}')\r\n", + 'first-line': 294, 'folded-linenos': [], - 'sel-line': 745, - 'sel-line-start': 24820, - 'selection_end': 24847, - 'selection_start': 24847, + 'sel-line': 313, + 'sel-line-start': 10634, + 'selection_end': 10638, + 'selection_start': 10638, 'zoom': 0}, - 1681165823.1419685], + 1682049546.9687011], [loc('phylogeny.py'), - {'attrib-starts': [('alph|0|', - 681), - ('alph|0|.SmallParsimony|0|', - 717), - ('alph|0|.SmallParsimony|0|.backtrack|0|', - 796)], - 'code-line': ' ancestor value for that node.\r\n', - 'first-line': 798, + {'attrib-starts': [('qrt|0|', + 205)], + 'code-line': ' ((i,j),(k,l)) = selector\r\n', + 'first-line': 234, 'folded-linenos': [], - 'sel-line': 819, - 'sel-line-start': 27816, - 'selection_end': 27848, - 'selection_start': 27848, + 'sel-line': 238, + 'sel-line-start': 7824, + 'selection_end': 7860, + 'selection_start': 7860, 'zoom': 0}, - 1681165997.47145], + 1682058586.083041], [loc('phylogeny.py'), - {'attrib-starts': [('alph|0|', - 681), - ('alph|0|.SmallParsimony|0|', - 717), - ('alph|0|.SmallParsimony|0|.backtrack|0|', - 796)], - 'code-line': ' ancestor value for that node.\r\n', - 'first-line': 914, + {'attrib-starts': [('qrt|0|', + 205)], + 'code-line': ' ((i,j),(k,l)) = selector\r\n', + 'first-line': 0, 'folded-linenos': [], - 'sel-line': 819, - 'sel-line-start': 27808, - 'selection_end': 27840, - 'selection_start': 27840, + 'sel-line': 238, + 'sel-line-start': 7824, + 'selection_end': 7860, + 'selection_start': 7860, 'zoom': 0}, - 1681166011.8419304], - [loc('phylogeny.py'), - {'attrib-starts': [('alph|0|', - 681), - ('alph|0|.SmallParsimony|0|', - 717), - ('alph|0|.SmallParsimony|0|.backtrack|0|', - 796)], - 'code-line': ' ancestor value for that node.\r\n', - 'first-line': 814, + 1682058587.2329419], + [loc('qrtd.py'), + {'attrib-starts': [], + 'code-line': ' print(qrtd(\r\n', + 'first-line': 21, 'folded-linenos': [], - 'sel-line': 819, - 'sel-line-start': 27786, - 'selection_end': 27818, - 'selection_start': 27818, + 'sel-line': 36, + 'sel-line-start': 1484, + 'selection_end': 1502, + 'selection_start': 1498, 'zoom': 0}, - 1681166018.3080268], + 1682058595.5595853], [loc('phylogeny.py'), - {'attrib-starts': [('alph|0|', - 681), - ('alph|0|.SmallParsimony|0|', - 717), - ('alph|0|.SmallParsimony|0|.backtrack|0|', - 796)], - 'code-line': ' ancestor value for that node.\r\n', - 'first-line': 844, + {'attrib-starts': [], + 'code-line': 'def qrtd(species,T1,T2):\r\n', + 'first-line': 231, 'folded-linenos': [], - 'sel-line': 819, - 'sel-line-start': 27786, - 'selection_end': 27818, - 'selection_start': 27818, + 'sel-line': 243, + 'sel-line-start': 7925, + 'selection_end': 7933, + 'selection_start': 7929, 'zoom': 0}, - 1681166022.1189773], + 1682058611.6455228], [loc('phylogeny.py'), - {'attrib-starts': [('alph|0|', - 681), - ('alph|0|.SmallParsimony|0|', - 717), - ('alph|0|.SmallParsimony|0|.backtrack|0|', - 796)], - 'code-line': ' ancestor value for that node.\r\n', - 'first-line': 880, + {'attrib-starts': [], + 'code-line': 'def qrtd(species,T1,T2):\r\n', + 'first-line': 279, 'folded-linenos': [], - 'sel-line': 819, - 'sel-line-start': 27786, - 'selection_end': 27818, - 'selection_start': 27818, + 'sel-line': 243, + 'sel-line-start': 7925, + 'selection_end': 7933, + 'selection_start': 7929, 'zoom': 0}, - 1681166029.6216605], + 1682059367.8108923], [loc('phylogeny.py'), - {'attrib-starts': [('alph|0|', - 681), - ('alph|0|.SmallParsimony|0|', - 717), - ('alph|0|.SmallParsimony|0|.backtrack|0|', - 796)], - 'code-line': ' ancestor value for that node.\r\n', + {'attrib-starts': [], + 'code-line': 'def qrtd(species,T1,T2):\r\n', 'first-line': 0, 'folded-linenos': [], - 'sel-line': 819, - 'sel-line-start': 27786, - 'selection_end': 27818, - 'selection_start': 27818, + 'sel-line': 243, + 'sel-line-start': 7925, + 'selection_end': 7933, + 'selection_start': 7929, 'zoom': 0}, - 1681166033.3256762], + 1682059374.9332933], [loc('phylogeny.py'), - {'attrib-starts': [('qrtd|0|', - 242), - ('qrtd|0|.create_base_powers|0|', - 357)], - 'code-line': ' mult = 2**11\r\n', - 'first-line': 360, + {'attrib-starts': [], + 'code-line': 'def qrtd(species,T1,T2):\r\n', + 'first-line': 553, 'folded-linenos': [], - 'sel-line': 363, - 'sel-line-start': 11844, - 'selection_end': 11864, - 'selection_start': 11864, + 'sel-line': 243, + 'sel-line-start': 7925, + 'selection_end': 7933, + 'selection_start': 7929, 'zoom': 0}, - 1681166126.050105], + 1682059377.5256574], [loc('phylogeny.py'), - {'attrib-starts': [('qrtd|0|', - 242), - ('qrtd|0|.create_quartets|0|', - 348)], - 'code-line': ' product = create_quartets_for_edge(edges[0,:],descendents)\r\n', - 'first-line': 334, + {'attrib-starts': [], + 'code-line': 'def qrtd(species,T1,T2):\r\n', + 'first-line': 636, 'folded-linenos': [], - 'sel-line': 353, - 'sel-line-start': 11522, - 'selection_end': 11539, - 'selection_start': 11539, + 'sel-line': 243, + 'sel-line-start': 7925, + 'selection_end': 7933, + 'selection_start': 7929, 'zoom': 0}, - 1681166181.4875975], + 1682059378.375369], [loc('phylogeny.py'), - {'attrib-starts': [('qrtd|0|', - 242), - ('qrtd|0|.create_quartets|0|', - 369)], - 'code-line': '\r\n', - 'first-line': 363, + {'attrib-starts': [], + 'code-line': 'def qrtd(species,T1,T2):\r\n', + 'first-line': 253, 'folded-linenos': [], - 'sel-line': 378, - 'sel-line-start': 12345, - 'selection_end': 12345, - 'selection_start': 12345, + 'sel-line': 243, + 'sel-line-start': 7925, + 'selection_end': 7933, + 'selection_start': 7929, 'zoom': 0}, - 1681166535.0131352], + 1682059423.7484474], [loc('phylogeny.py'), {'attrib-starts': [('qrtd|0|', - 242), - ('qrtd|0|.shorten_leaves|0|', - 424)], - 'code-line': ' Replace leaves of tree with the index of the species\r\n', - 'first-line': 423, + 243), + ('qrtd|0|.claim|0|', + 304)], + 'code-line': ' return comb(len(F1.intersection(G1)),2,exact=True) * \\\r\n', + 'first-line': 295, 'folded-linenos': [], - 'sel-line': 428, - 'sel-line-start': 13751, - 'selection_end': 13811, - 'selection_start': 13811, + 'sel-line': 311, + 'sel-line-start': 10409, + 'selection_end': 10480, + 'selection_start': 10480, 'zoom': 0}, - 1681166661.2550056], + 1682059556.5252287], [loc('phylogeny.py'), - {'attrib-starts': [('qrt|0|', - 204)], - 'code-line': ' def isConsistent(selector):\r\n', - 'first-line': 202, + {'attrib-starts': [], + 'code-line': 'from helpers import flatten, expand\r\n', + 'first-line': 6, 'folded-linenos': [], - 'sel-line': 224, - 'sel-line-start': 7199, - 'selection_end': 7219, - 'selection_start': 7207, + 'sel-line': 28, + 'sel-line-start': 1197, + 'selection_end': 1214, + 'selection_start': 1214, 'zoom': 0}, - 1681166679.6327], + 1682059587.1960719], [loc('phylogeny.py'), - {'attrib-starts': [('qrt|0|', - 204)], - 'code-line': ' def isConsistent(selector):\r\n', - 'first-line': 241, + {'attrib-starts': [], + 'code-line': 'from helpers import flatten, expand\r\n', + 'first-line': 75, 'folded-linenos': [], - 'sel-line': 224, - 'sel-line-start': 7199, - 'selection_end': 7219, - 'selection_start': 7207, + 'sel-line': 28, + 'sel-line-start': 1197, + 'selection_end': 1214, + 'selection_start': 1214, 'zoom': 0}, - 1681166699.5203605], - [loc('qrtd.py'), + 1682059587.367873], + [loc('phylogeny.py'), {'attrib-starts': [], - 'code-line': ' Result = qrtd(Input[0].split(), Input[1], Input[2])\r\n', - 'first-line': 34, + 'code-line': 'def qrtd(species,T1,T2):\r\n', + 'first-line': 254, 'folded-linenos': [], - 'sel-line': 45, - 'sel-line-start': 1731, - 'selection_end': 1752, - 'selection_start': 1748, + 'sel-line': 242, + 'sel-line-start': 7943, + 'selection_end': 7951, + 'selection_start': 7947, 'zoom': 0}, - 1681166701.02481]], + 1682059610.8323143]], 20), - 'current-loc': None, - 'editor-state-list': [], - 'has-focus': True, + 'current-loc': loc('phylogeny.py'), + 'editor-state-list': [(loc('../AppData/Local/Programs/Python/Python311/Lib/site-packages/Bio/Phylo/BaseTree.py'), + {'attrib-starts': [('TreeMixin|0|', + 261)], + 'code-line': ' def find_clades(self, target=None, terminal=None, order="preorder", **kwargs):\r\n', + 'first-line': 0, + 'folded-linenos': [], + 'sel-line': 356, + 'sel-line-start': 12713, + 'selection_end': 12772, + 'selection_start': 12767, + 'zoom': 0}), + (loc('../AppData/Local/Programs/Python/Python311/Lib/unittest/case.py'), + {'attrib-starts': [('TestCase|0|', + 343), + ('TestCase|0|._baseAssertEqual|0|', + 860)], + 'code-line': ' raise self.failureException(msg)\r\n', + 'first-line': 845, + 'folded-linenos': [], + 'sel-line': 865, + 'sel-line-start': 33596, + 'selection_end': 33596, + 'selection_start': 33596, + 'zoom': 0}), + (loc('phylogeny.py'), + {'attrib-starts': [], + 'code-line': 'def qrtd(species,T1,T2):\r\n', + 'first-line': 254, + 'folded-linenos': [], + 'sel-line': 242, + 'sel-line-start': 7943, + 'selection_end': 7951, + 'selection_start': 7947, + 'zoom': 0}), + (loc('qrtd.py'), + {'attrib-starts': [], + 'code-line': ' print(qrtd(\r\n', + 'first-line': 21, + 'folded-linenos': [], + 'sel-line': 36, + 'sel-line-start': 1484, + 'selection_end': 1502, + 'selection_start': 1498, + 'zoom': 0})], + 'has-focus': False, 'locked': False}, - []), - 'open_files': []}, + [loc('../AppData/Local/Programs/Python/Python311/Lib/site-packages/Bio/Phylo/BaseTree.py'), + loc('../AppData/Local/Programs/Python/Python311/Lib/unittest/case.py'), + loc('phylogeny.py'), + loc('qrtd.py')]), + 'open_files': ['../AppData/Local/Programs/Python/Python311/Lib/site-packages/Bio/Phylo/BaseTree.py', + 'qrtd.py', + 'phylogeny.py']}, 'saved_notebook_display': None, 'split_percents': {0: 0.5}, 'splits': 2, 'tab_location': 'top', 'traversal_pos': ((1, 0), - 1681166691.522814), + 1682059628.8027635), 'user_data': {}}, 'saved_notebook_display': None, 'split_percents': {}, @@ -2118,13 +2114,16 @@ guimgr.overall-gui-state = {'windowing-policy': 'combined-window', 'tab_location': 'left', 'traversal_pos': ((0, 3), - 1680753615.7185273), + 1682047191.7566926), 'user_data': {}}, 'window-alloc': (28, -1, 1360, 732)}]} -guimgr.recent-documents = [loc('../AppData/Local/Programs/Python/Python311/Lib/site-packages/Bio/Phylo/BaseTree.py')] +guimgr.recent-documents = [loc('../AppData/Local/Programs/Python/Python311/Lib/unittest/case.py'), + loc('phylogeny.py'), + loc('qrtd.py'), + loc('../AppData/Local/Programs/Python/Python311/Lib/site-packages/Bio/Phylo/BaseTree.py')] guimgr.visual-state = {loc('../../../Anaconda3/lib/site-packages/Bio/File.py'): {'attrib-starts': [('as_handle', 57)], 'first-line': 93, @@ -4046,15 +4045,17 @@ guimgr.visual-state = {loc('../../../Anaconda3/lib/site-packages/Bio/File.py'): 'selection_end': 23, 'selection_start': 23, 'zoom': 0}, - loc('phylogeny.py'): {'attrib-starts': [('qrt|0|', - 204)], - 'code-line': ' def isConsistent(selector):\r\n', - 'first-line': 241, + loc('phylogeny.py'): {'attrib-starts': [('qrtd|0|', + 242), + ('qrtd|0|.index_nodes_and_edges|0|', + 251)], + 'code-line': '\r\n', + 'first-line': 245, 'folded-linenos': [], - 'sel-line': 224, - 'sel-line-start': 7199, - 'selection_end': 7219, - 'selection_start': 7207, + 'sel-line': 252, + 'sel-line-start': 8190, + 'selection_end': 8190, + 'selection_start': 8190, 'zoom': 0}, loc('pmch.py'): {'attrib-starts': [], 'code-line': '# Copyright (C) 2017-2020 Greenweaves Software Limited\r\n', @@ -4093,13 +4094,13 @@ guimgr.visual-state = {loc('../../../Anaconda3/lib/site-packages/Bio/File.py'): 'selection_start': 1742, 'zoom': 0}, loc('qrtd.py'): {'attrib-starts': [], - 'code-line': ' Result = qrtd(Input[0].split(), Input[1], Input[2])\r\n', - 'first-line': 34, + 'code-line': 'def qrtd(species,T1,T2):\r\n', + 'first-line': 17, 'folded-linenos': [], - 'sel-line': 45, - 'sel-line-start': 1731, - 'selection_end': 1752, - 'selection_start': 1748, + 'sel-line': 28, + 'sel-line-start': 1128, + 'selection_end': 1264, + 'selection_start': 1128, 'zoom': 0}, loc('qrtd1.py'): {'attrib-starts': [], 'code-line': 'from matplotlib.pyplot import figure, show\r\n',