From 597466f52544f11944d85cf1b3b4f85f9e0845a0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bertrand=20N=C3=A9ron?= <bneron@pasteur.fr>
Date: Sun, 23 Nov 2014 22:50:48 +0100
Subject: [PATCH] add pseudocode for most of exercises

adapt solutions to use functions as they are view earlier
externalize code to be dowloadable for student
---
 source/Collection_Data_Types.rst              | 483 +++++++++++-------
 source/Control_Flow_Statements.rst            | 224 +++++---
 source/Data_Types.rst                         |   2 +-
 ..._Functions.rst => Dive_into_Functions.rst} |  10 +-
 source/Modules_and_Packages.rst               |  19 +-
 source/_static/code/codons.py                 |  10 +
 source/_static/code/codons_itertools.py       |   6 +
 source/_static/code/enzyme_1.py               |  12 +
 source/_static/code/kmer.py                   |  16 +-
 source/_static/code/kmer_2.py                 |  17 +
 source/_static/code/restriction.py            |  50 ++
 source/_static/code/rev_comp.py               |  15 +
 source/_static/code/rev_comp2.py              |  17 +
 source/_static/code/similarity.py             |  35 +-
 source/_static/code/translate.py              |  18 +-
 source/_static/code/uniqify.py                |   6 +
 source/_static/data/similarity_matrix         |   5 +
 .../figs/augmented_assignment_int2.png        | Bin 0 -> 29487 bytes
 .../figs/augmented_assignment_list2.png       | Bin 0 -> 35453 bytes
 source/index.rst                              |   2 +-
 20 files changed, 648 insertions(+), 299 deletions(-)
 rename source/{Creating_and_Calling_Functions.rst => Dive_into_Functions.rst} (97%)
 create mode 100644 source/_static/code/codons.py
 create mode 100644 source/_static/code/codons_itertools.py
 create mode 100644 source/_static/code/enzyme_1.py
 create mode 100644 source/_static/code/kmer_2.py
 create mode 100644 source/_static/code/restriction.py
 create mode 100644 source/_static/code/rev_comp.py
 create mode 100644 source/_static/code/rev_comp2.py
 create mode 100644 source/_static/code/uniqify.py
 create mode 100644 source/_static/data/similarity_matrix
 create mode 100644 source/_static/figs/augmented_assignment_int2.png
 create mode 100644 source/_static/figs/augmented_assignment_list2.png

diff --git a/source/Collection_Data_Types.rst b/source/Collection_Data_Types.rst
index e9f011a..1ba09e1 100644
--- a/source/Collection_Data_Types.rst
+++ b/source/Collection_Data_Types.rst
@@ -61,6 +61,38 @@ We can observe this using *id()* which give the memory adress of an object. This
    in ``a operator= b`` python looks up ``a`` ’s value only once, so it is potentially faster
    than the ``a = a operator b``.
 
+
+compare ::
+
+   x = 3
+   y = x
+   y += 3
+   x = ?
+   y = ?
+   
+   
+.. figure:: _static/figs/augmented_assignment_int2.png  
+   :width: 400px
+   :alt: augmented_assignment
+   :figclass: align-center 
+
+   
+and ::
+
+   x = [1,2]
+   y = x
+   y += [3,4]
+   x = ?
+   y = ?  
+
+
+.. figure:: _static/figs/augmented_assignment_list2.png  
+   :width: 400px
+   :alt: list extend
+   :figclass: align-center 
+
+
+
 Exercise
 --------
 
@@ -142,15 +174,51 @@ from the list l = [1, 2, 3, 4, 5, 6, 7, 8, 9] generate 2 lists l1 containing all
 Exercise
 --------
    
-generate a list containing all codons. ::
+generate a list containing all codons.
+   
+pseudocode:
+"""""""""""
+
+| *function all_codons()*
+|     *all_codons <- empty list*
+|     *let varying the first base*
+|     *for each first base let varying the second base*
+|     *for each combination first base, second base let varying the third base*
+|     *add the concatenation base 1 base 2 base 3 to all_codons*
+|     *return all_codons*
+
+first implementation:
+"""""""""""""""""""""
+.. literalinclude:: _static/code/codons.py
+   :linenos:
+   :language: python
+
+::
+
+   python -i codons.py 
+   >>> codons = all_codons()
+   
+:download:`codons.py <_static/code/codons.py>` .  
+
+second implementation:
+""""""""""""""""""""""
+
+Mathematically speaking the generation of all codons can be the cartesiens product 
+between 3 vectors 'acgt'. 
+In python there is a function to do that in ``itertools module``: `https://docs.python.org/2/library/itertools.html#itertools.product <product>`_
+
+
+.. literalinclude:: _static/code/codons_itertools.py
+   :linenos:
+   :language: python
+
+::
+
+   python -i codons.py 
+   >>> codons = all_codons()
    
-   bases = 'acgt'
-   codons = []
-      for a in bases:
-         for b in bases:
-            for c in bases:
-               codon = a + b + c
-               codons.append(codon)
+:download:`codons_itertools.py <_static/code/codons_itertools.py>` .
+
                
 Exercise
 --------
@@ -162,175 +230,213 @@ For example: ::
    >>> uniqify(l)
    >>> [1,2,3,5] #is one of the solutions 
 
-solution ::
 
-   >>> list(set(l))
+pseudocode:
+"""""""""""
 
+| *function uniqify(l)*
+|     *uniq <- empty list*
+|     *for each element of l*
+|        *add element if is not in uniq*
+|     *return uniq*
 
-Exercise
---------
+implementation:
+"""""""""""""""
 
-let the following enzymes collection: ::
- 
-   import collections
-   RestrictEnzyme = collections.namedtuple("RestrictEnzyme", "name comment sequence cut end")
+.. literalinclude:: _static/code/uniqify.py
+   :linenos:
+   :language: python
 
-   ecor1 = RestrictEnzyme("EcoRI", "Ecoli restriction enzime I", "gaattc", 1, "sticky")
-   ecor5 = RestrictEnzyme("EcoRV", "Ecoli restriction enzime V", "gatatc", 3, "blunt")
-   bamh1 = RestrictEnzyme("BamHI", "type II restriction endonuclease from Bacillus amyloliquefaciens ", "ggatcc", 1, "sticky")
-   hind3 = RestrictEnzyme("HindIII", "type II site-specific nuclease from Haemophilus influenzae", "aagctt", 1 , "sticky")
-   taq1 = RestrictEnzyme("TaqI", "Thermus aquaticus", "tcga", 1 , "sticky")
-   not1 = RestrictEnzyme("NotI", "Nocardia otitidis", "gcggccgc", 2 , "sticky")
-   sau3a1 = RestrictEnzyme("Sau3aI", "Staphylococcus aureus", "gatc", 0 , "sticky")
-   hae3 = RestrictEnzyme("HaeIII", "Haemophilus aegyptius", "ggcc", 2 , "blunt")
-   sma1 =  RestrictEnzyme("SmaI", "Serratia marcescens", "cccggg", 3 , "blunt")
+::
 
-and the 2 dna fragments: ::
+   >>> l=[1,2,3,2,3,4,5,1,2,3,3,2,7,8,9]
+   >>> uniqify(l)
+   [1, 2, 3, 4, 5, 7, 8, 9]
 
-   dna_1 = """tcgcgcaacgtcgcctacatctcaagattcagcgccgagatccccgggggttgagcgatccccgtcagttggcgtgaattcag
-   cagcagcgcaccccgggcgtagaattccagttgcagataatagctgatttagttaacttggatcacagaagcttccaga
-   ccaccgtatggatcccaacgcactgttacggatccaattcgtacgtttggggtgatttgattcccgctgcctgccagg"""
+:download:`codons_itertools.py <_static/code/codons_itertools.py>` .
 
-   dna_2 = """gagcatgagcggaattctgcatagcgcaagaatgcggccgcttagagcgatgctgccctaaactctatgcagcgggcgtgagg
-   attcagtggcttcagaattcctcccgggagaagctgaatagtgaaacgattgaggtgttgtggtgaaccgagtaag
-   agcagcttaaatcggagagaattccatttactggccagggtaagagttttggtaaatatatagtgatatctggcttg"""
+second implementation:
+""""""""""""""""""""""
 
-| which enzymes cut the dna_1 ?
-|                  the dna_2 ?
-|                  the dna_1 but not the dna_2?
+The problem with the first implementation come from the line 4.
+Remember that the membership operator uses a linear search for list, which can be slow for very large collections.
+If we plan to use ``uniqify`` with large list we should find a better algorithm.
+In the specification we can read that uniqify can work *regardless the order of the resulting list*.
+So we can use the specifycity of set ::
 
-::
+ 
+   >>> list(set(l))
 
-   dna_1 = dna_1.replace('\n', '')
-   dans_2 = dna_2.replace('\n', '')
 
-algorithm 1 ::
+Exercise
+--------
 
-   enzymes = [ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1]
-   digest_1 = []
-   for enz in enzymes:
-      if enz.sequence in dna_1:
-         digest_1.append(enz)
+We need to compute the occurence of all kmers of a given lenght present in a sequence.
 
-algorithm 2 we can determine the position of the site :: 
-   
-   enzymes = [ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1]
-   digest_1 = []
-   for enz in enzymes:
-      pos = dna_1.find(enz.sequence)
-      if pos != -1:
-         digest_1.append(enz)
+Below we propose 2 algorithms. 
 
+pseudo code 1
+"""""""""""""
 
-with these algorithms we find if an enzyme cut the dna but we cannot find all cuts in the dna for an enzyme. ::
+|   *function get_kmer_occurences(seq, kmer_len)*
+|      *all_kmers <- generate all possible kmer of kmer_len*
+|      *occurences <- 0* 
+|      *for each kmer in all_kmers*
+|         *count occurence of kmer*
+|         *store occurence*
+     
+pseudo code 2
+"""""""""""""
+
+|  *function get_kmer_occurences(seq, kmer_len)*
+|     *all_kmers <- empty*
+|     *from i = 0 to sequence length - kmer_len*
+|        *kmer <- kmer startin at pos i im sequence*
+|        *increase by of occurence of kmer*
+ 
 
-   enzymes = [ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1]
-   digest_1 = []
-   for enz in enzymes:
-      print enz.name, dna_1.count(enz.sequence)
+.. note::
 
-the latter algorithm display the number of occurence of each enzyme, But we cannot determine the position of every sites.
-We will see howt to do this later.
+   Computer scientists typically measure an algorithm’s efficiency in terms of its worst-case running time, 
+   which is the largest amount of time an algorithm can take given the most difficult input of a fixed size. 
+   The advantage to considering the worst case running time is that we are guaranteed that our algorithm 
+   will never behave worse than our worst-case estimate.
+   
+   Big-O notation compactly describes the running time of an algorithm. 
+   For example, if your algorithm for sorting an array of n numbers takes roughly n2 operations for the most difficult dataset, 
+   then we say that the running time of your algorithm is O(n2). In reality, depending on your implementation, it may be use any number of operations, 
+   such as 1.5n2, n2 + n + 2, or 0.5n2 + 1; all these algorithms are O(n2) because big-O notation only cares about the term that grows the fastest with 
+   respect to the size of the input. This is because as n grows very large, the difference in behavior between two O(n2) functions, 
+   like 999 · n2 and n2 + 3n + 9999999, is negligible when compared to the behavior of functions from different classes, 
+   say O(n2) and O(n6). Of course, we would prefer an algorithm requiring 1/2 · n2 steps to an algorithm requiring 1000 · n2 steps.
+
+   When we write that the running time of an algorithm is O(n2), we technically mean that it does not grow faster than a function with a 
+   leading term of c · n2, for some constant c. Formally, a function f(n) is Big-O of function g(n), or O(g(n)), when f(n) ≤ c · g(n) for some 
+   constant c and sufficiently large n.
+
+   For more on Big-O notation, see A `http://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/Beginner's <Guide to Big-O Notation>`_.
+   
 
+Compare the pseudocode of each of them and implement the fastest one. ::
 
+   """gtcagaccttcctcctcagaagctcacagaaaaacacgctttctgaaagattccacactcaatgccaaaatataccacag
+      gaaaattttgcaaggctcacggatttccagtgcaccactggctaaccaagtaggagcacctcttctactgccatgaaagg
+      aaaccttcaaaccctaccactgagccattaactaccatcctgtttaagatctgaaaaacatgaagactgtattgctcctg
+      atttgtcttctaggatctgctttcaccactccaaccgatccattgaactaccaatttggggcccatggacagaaaactgc
+      agagaagcataaatatactcattctgaaatgccagaggaagagaacacagggtttgtaaacaaaggtgatgtgctgtctg
+      gccacaggaccataaaagcagaggtaccggtactggatacacagaaggatgagccctgggcttccagaagacaaggacaa
+      ggtgatggtgagcatcaaacaaaaaacagcctgaggagcattaacttccttactctgcacagtaatccagggttggcttc
+      tgataaccaggaaagcaactctggcagcagcagggaacagcacagctctgagcaccaccagcccaggaggcacaggaaac
+      acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca"""
 
-Exercise
---------
-From a list return a new list without any duplicate, but keeping the order of items. 
-For example: ::
 
-   >>> l = [5,2,3,2,2,3,5,1]
-   >>> uniqify_with_order(l)
-   >>> [5,2,3,1]  
+In the first alogrithm. 
 
-solution ::
+| we first compute all kmers we generate 4\ :sup:`kmer length`
+| then we count the occurence of each kmer in the sequence
+| so for each kmer we read all the sequence so the algorith is in O( 4\ :sup:`kmer length` * ``sequence length``) 
 
-   >>> uniq = []
-   >>> for item in l:
-   >>>   if item not in uniq:
-   >>>      uniq.append(item)
+| In the secon algorithm we read the sequence only once 
+| So the algorithm is in O(sequence length)
 
 
-Exercise
---------
+Compute the 6 mers occurences of the sequence above, and print each 6mer and it's occurence one per line.
 
-list and count occurences of every 3mers in the following sequence ::
+.. literalinclude:: _static/code/kmer.py
+   :linenos:
+   :language: python
 
-   s = """gtcagaccttcctcctcagaagctcacagaaaaacacgctttctgaaagattccacactcaatgccaaaatataccacag
-   gaaaattttgcaaggctcacggatttccagtgcaccactggctaaccaagtaggagcacctcttctactgccatgaaagg
-   aaaccttcaaaccctaccactgagccattaactaccatcctgtttaagatctgaaaaacatgaagactgtattgctcctg
-   atttgtcttctaggatctgctttcaccactccaaccgatccattgaactaccaatttggggcccatggacagaaaactgc
-   agagaagcataaatatactcattctgaaatgccagaggaagagaacacagggtttgtaaacaaaggtgatgtgctgtctg
-   gccacaggaccataaaagcagaggtaccggtactggatacacagaaggatgagccctgggcttccagaagacaaggacaa
-   ggtgatggtgagcatcaaacaaaaaacagcctgaggagcattaacttccttactctgcacagtaatccagggttggcttc
-   tgataaccaggaaagcaactctggcagcagcagggaacagcacagctctgagcaccaccagcccaggaggcacaggaaac
-   acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca"""
+::
 
-and finally print the results one 3mer and it's occurence per line. 
+   >>> s = """"gtcagaccttcctcctcagaagctcacagaaaaacacgctttctgaaagattccacactcaatgccaaaatataccacag
+   ... gaaaattttgcaaggctcacggatttccagtgcaccactggctaaccaagtaggagcacctcttctactgccatgaaagg
+   ... aaaccttcaaaccctaccactgagccattaactaccatcctgtttaagatctgaaaaacatgaagactgtattgctcctg
+   ... atttgtcttctaggatctgctttcaccactccaaccgatccattgaactaccaatttggggcccatggacagaaaactgc
+   ... agagaagcataaatatactcattctgaaatgccagaggaagagaacacagggtttgtaaacaaaggtgatgtgctgtctg
+   ... gccacaggaccataaaagcagaggtaccggtactggatacacagaaggatgagccctgggcttccagaagacaaggacaa
+   ... ggtgatggtgagcatcaaacaaaaaacagcctgaggagcattaacttccttactctgcacagtaatccagggttggcttc
+   ... tgataaccaggaaagcaactctggcagcagcagggaacagcacagctctgagcaccaccagcccaggaggcacaggaaac
+   ... acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca"""
+   >>> s = s.replace('\n', '')
+   >>> kmers = get_kmer_occurences(s, 6)
+   >>> for kmer in kmers:
+   >>>   print kmer[0], '..', kmer[1]
+   gcagag .. 2
+   aacttc .. 1
+   gcaact .. 1
+   aaatat .. 2
+   
+   
+:download:`kmer.py <_static/code/kmer.py>` .
 
-write first the pseudocode, then implement it.
 
 bonus:
-print the kmer by incresing occurences.
+""""""
 
-solution ::
+Print the kmers by ordered by occurences.
 
-   s = s.replace('\n', '')
-   kmers = {}
-   # range exclude the last value range(3) -> 0, 1 ,2
-   # so we nned to go to len(s) minus trimer + 1 to include the 
-   # last base 
-   for i in range(len(s) - 3 +1):
-      kmer = s[i:i+3]
-      kmers[kmer] = kmers.get(kmer, 0) + 1
+| see `https://docs.python.org/2/library/stdtypes.html#mutable-sequence-types <sort>`_
+| see `https://docs.python.org/2/library/operator.html#operator.itemgetter <operator.itemgetter>`_
 
-   for kmer, occurence in kmers.items():
-      print kmer, " = ", occurence
 
-we can use also a defaultdict: ::
+.. literalinclude:: _static/code/kmer_2.py
+   :linenos:
+   :language: python
 
-   import collections
-   
-   s = s.replace('\n', '')
-   kmers = collection.defaultdict(int)
-   for i in range(len(s) - 2):
-      kmer = s[i:i+3]
-      kmers[kmer] += 1
-
-solution bonus ::
+::
 
-   list_of_kmers = kmers.items()  
-   from operator import itemgetter
-   list_of_kmers.sort(key=itemgetter(1)) 
-   for kmer, occurence in list_of_kmers:
-      print kmer, " = ", occurence
+   >>> s = """"gtcagaccttcctcctcagaagctcacagaaaaacacgctttctgaaagattccacactcaatgccaaaatataccacag
+   ... gaaaattttgcaaggctcacggatttccagtgcaccactggctaaccaagtaggagcacctcttctactgccatgaaagg
+   ... aaaccttcaaaccctaccactgagccattaactaccatcctgtttaagatctgaaaaacatgaagactgtattgctcctg
+   ... atttgtcttctaggatctgctttcaccactccaaccgatccattgaactaccaatttggggcccatggacagaaaactgc
+   ... agagaagcataaatatactcattctgaaatgccagaggaagagaacacagggtttgtaaacaaaggtgatgtgctgtctg
+   ... gccacaggaccataaaagcagaggtaccggtactggatacacagaaggatgagccctgggcttccagaagacaaggacaa
+   ... ggtgatggtgagcatcaaacaaaaaacagcctgaggagcattaacttccttactctgcacagtaatccagggttggcttc
+   ... tgataaccaggaaagcaactctggcagcagcagggaacagcacagctctgagcaccaccagcccaggaggcacaggaaac
+   ... acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca"""
+   >>> s = s.replace('\n', '')
+   >>> kmers = get_kmer_occurences(s, 6)
+   >>> for kmer, occ in kmers:
+   >>>   print kmer, '..', occ
+   cacagg .. 4
+   aggaaa .. 4
+   ttctga .. 3
+   ccagtg .. 3
+   
+   
+:download:`kmer_2.py <_static/code/kmer_2.py>` .
 
- solution bonus ::
 
-   list_of_kmers = kmers.items()      
-   list_of_kmers.sort(key = lambda kmer: kmer[1])
-   for kmer, occurence in list_of_kmers:
-      print kmer, " = ", occurence   
-      
-  
 Exercise
 --------
 
-compute the reversed complement of the following sequence: ::
+| Write a function which take a sequence as parameter and return it's reversed complement.
+| Write the pseudocode before to propose an implementation.
+
+pseudocode:
+"""""""""""
 
-   seq = 'acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca'
+| *function reverse_comp(sequence)*
+|     *complement <- establish a correpondance and each base and its complement*
+|     *rev_seq <- revert the sequence*
+|     *rev_comp <- empty*
+|     *for each nt of rev_seq*
+|        *concatenate nt complement to rev_comp*
+|     *return rev_comp
 
-   base_comp = { 'a' : 't', 
-                 'c' : 'g',
-                 'g' : 'c',
-                 't' : 'a'}
-   complement = ''
-   for base in seq:
-      complement += base_comp[base]
+.. literalinclude:: _static/code/rev_comp2.py
+   :linenos:
+   :language: python
 
-   reverse_comp = complement[::-1]
-   print reverse_comp
+::
+   >>> from rev_comp import rev_comp
+   >>>
+   >>> seq = 'acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca'
+   >>> print rev_comp(seq)
    tgtgttgcgctcacgaaccagaccaagagcatccactggactttctcctctcagagcccactggccagccatgttgccgt
+   
+:download:`rev_comp.py <_static/code/rev_comp.py>` .
+
   
 other solution
 """"""""""""""
@@ -346,18 +452,86 @@ the characters to change and their new values is made in funtion of thier positi
 the first character of the first string will be replaced by the first character of the second string,
 the second character of the first string will be replaced by the second character of the second string, on so on.   
 So we can write the reverse complement without loop.
+   
+.. literalinclude:: _static/code/rev_comp2.py
+   :linenos:
+   :language: python
 
 ::
+   >>> from rev_comp2 import rev_comp
+   >>>
+   >>> seq = 'acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca'
+   >>> print rev_comp(seq)
+   tgtgttgcgctcacgaaccagaccaagagcatccactggactttctcctctcagagcccactggccagccatgttgccgt
+   
+:download:`rev_comp2.py <_static/code/rev_comp2.py>` .
 
-   from string import maketrans
+Exercise
+--------
+
+let the following enzymes collection: ::
+ 
+   import collections
+   RestrictEnzyme = collections.namedtuple("RestrictEnzyme", "name comment sequence cut end")
+
+   ecor1 = RestrictEnzyme("EcoRI", "Ecoli restriction enzime I", "gaattc", 1, "sticky")
+   ecor5 = RestrictEnzyme("EcoRV", "Ecoli restriction enzime V", "gatatc", 3, "blunt")
+   bamh1 = RestrictEnzyme("BamHI", "type II restriction endonuclease from Bacillus amyloliquefaciens ", "ggatcc", 1, "sticky")
+   hind3 = RestrictEnzyme("HindIII", "type II site-specific nuclease from Haemophilus influenzae", "aagctt", 1 , "sticky")
+   taq1 = RestrictEnzyme("TaqI", "Thermus aquaticus", "tcga", 1 , "sticky")
+   not1 = RestrictEnzyme("NotI", "Nocardia otitidis", "gcggccgc", 2 , "sticky")
+   sau3a1 = RestrictEnzyme("Sau3aI", "Staphylococcus aureus", "gatc", 0 , "sticky")
+   hae3 = RestrictEnzyme("HaeIII", "Haemophilus aegyptius", "ggcc", 2 , "blunt")
+   sma1 =  RestrictEnzyme("SmaI", "Serratia marcescens", "cccggg", 3 , "blunt")
+
+and the 2 dna fragments: ::
+
+   dna_1 = """tcgcgcaacgtcgcctacatctcaagattcagcgccgagatccccgggggttgagcgatccccgtcagttggcgtgaattcag
+   cagcagcgcaccccgggcgtagaattccagttgcagataatagctgatttagttaacttggatcacagaagcttccaga
+   ccaccgtatggatcccaacgcactgttacggatccaattcgtacgtttggggtgatttgattcccgctgcctgccagg"""
+
+   dna_2 = """gagcatgagcggaattctgcatagcgcaagaatgcggccgcttagagcgatgctgccctaaactctatgcagcgggcgtgagg
+   attcagtggcttcagaattcctcccgggagaagctgaatagtgaaacgattgaggtgttgtggtgaaccgagtaag
+   agcagcttaaatcggagagaattccatttactggccagggtaagagttttggtaaatatatagtgatatctggcttg"""
+
+| which enzymes cut the dna_1 ?
+|                  the dna_2 ?
+|                  the dna_1 but not the dna_2?
+
+
+#. Write a function *seq_one_line* which take a multi lines sequence and return a sequence in one line.
+#. Write a function *enz_filter* which take a sequence and a list of enzymes and return a new list containing 
+   the enzymes which are a binding site in the sequence
+#. use the functions above to compute the enzymes which cut the dna_1 
+   apply the same functions to compute the enzymes which cut the dna_2
+   compute the difference between the enzymes which cut the dna_1 and enzymes which cut the dna_2
+   
+.. literalinclude:: _static/code/enzymes_1.py
+   :linenos:
+   :language: python
+
+::
+   from enzyme_1 import *
+   
+   enzymes = [ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1]
+   dna_1 = one_line(dna_1)
+   dans_2 = one_line(dna_2)
+   enz_1 = enz_filter(enzymes, dna_1)
+   enz_2 = enz_filter(enzymes, dna_2) 
+   enz1_only = set(enz_1) - set(enz_2)
+
+:download:`enzymes_1.py <_static/code/enzymes_1.py>` .
+
+with this algorithm we find if an enzyme cut the dna but we cannot find all cuts in the dna for an enzyme. ::
+
+   enzymes = [ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1]
+   digest_1 = []
+   for enz in enzymes:
+      print enz.name, dna_1.count(enz.sequence)
+
+the latter algorithm display the number of occurence of each enzyme, But we cannot determine the position of every sites.
+We will see how to do this later.
 
-   #first we reverse the sequence
-   rev_comp = seq[::-1]
-   #then we complement it
-   nucleotide = 'ATCG'
-   complement = 'TAGC'
-   rosetta_stone = maketrans(nucleotide, complement)
-   rev_comp = rev_comp.translate(rosetta_stone)
 
       
 Exercise
@@ -387,36 +561,3 @@ solution ::
 
    inverted_d = {v : k for k, v in d.items()}
    
-Exercise
---------
-
-We assume that we have a phylogenic tree of mammals represented as nested lists. ::
-    
-   mammals = ['Bovine', ['Gibbon', ['Orang Utan', ['Gorilla', ['Chimp', 'Human']]]], 'Mouse' ]
-   
-We want to work on the subtree of apes (Gibbon, Orang Utan, Gorilla, Chimp, Human) 
-
-* extract the this subtree in a new tree
-* then insert 'Bonobo' at the same level of Chimp we want to obtanin something like this :[chimp, bonobo], Human]
-   
-what's append on mammals? explain the result. ::
-
-   import copy
-     
-   mammals = ['Bovine', ['Gibbon', ['Orang Utan', ['Gorilla', ['Chimp', 'Human']]]], 'Mouse' ]
-   apes = copy.copy(mammals[1])
-   apes [1][1][1] = [['Chimp', 'Bonobo'], 'Human']
-   print mammals
-   ['Bovine', ['Gibbon', ['Orang Utan', ['Gorilla', ['Chimp', 'Human']]]], 'Mouse' ]
-
-what we should do to work with apes without modify mammals?
-   
-when we extract apes form mammals we did a shallow copy of mammals. tha mean we create a new list but each item in mammals 
-are not copy. when we modify apes we mutate an element of apes which was also referenced in mammals so mammals is modified to.
-This is what we call a side effect. To avoid that we should use deepcopy from module copy.
-to create apes we should write: ::
-
-   apes = copy.deepcopy(mammals[1]) 
-   
-deepcopy not only copy the list but make also a copy of each items of list recursively.
- 
diff --git a/source/Control_Flow_Statements.rst b/source/Control_Flow_Statements.rst
index 026d9e5..1ec4c1f 100644
--- a/source/Control_Flow_Statements.rst
+++ b/source/Control_Flow_Statements.rst
@@ -11,7 +11,6 @@ Exercises
 Exercise
 --------
 
-Calculates the 10 first number of the Fibonacci sequence .
 The Fibonacci sequence are the numbers in the following integer sequence:
 
     0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
@@ -24,35 +23,162 @@ The fibonacci suite can be defined as following:
 |    
 |    F\ :sub:`n` = F\ :sub:`n-1` + F\ :sub:`n-2` 
 
+Write a function which take an integer ``n`` as parameter
+and returns a list containing the ``n`` first number of the Fibonacci sequence. 
+
+
 .. literalinclude:: _static/code/fibonacci_iteration.py
    :linenos:
    :language: python
    
-
+:download:`fibonacci_iteration.py <_static/code/fibonacci_iteration.py>` .
 We will see another way more elegant to implement the fibonacci suite in :ref:`Advance Programming Techniques` section.
 
+
+
 Exercise
 --------
 
-display the largest element in list (containing float or integer only)?::
+Reimplement your own function max (my_max).
+This function will take a list or tuple of float or integer and 
+returns the largest element?
 
-   l = [1,2,3,4,58,9]
-   higest = l[0]
-   for i in l:
-      if i > highest:
-         highest = i
-    print highest
-      
+Write the pseudocode before to propose an implementation.
+
+pseudocode
+^^^^^^^^^^
+
+| *function my_max(l)*
+|   *max <- first elt of l*
+|   *for each elts of l*
+|       *if elt is > max*
+|       *max <- elt*
+|   *return max*
 
+
+implementation
+^^^^^^^^^^^^^^
+
+::
+
+   def my_max(seq):
+      """
+      return the maximum value in a sequence 
+      work only with integer or float
+      """
+      higest = seq[0]
+      for i in seq:
+         if i > highest:
+             highest = i
+      return highest
+      
+   l = [1,2,3,4,58,9]
+   print my_max(l)
+   58
+   
+   
 Exercise
 --------
 
-let the following enzymes collection: ::
+| We want to establish a restriction map of a sequence. 
+| But we will do this step by step.
+| and reuse the enzymes used in previous chapter: 
+
+* create a function that take a sequence and an enzyme as parameter and return 
+   the position of first binding sites.
+   (write the pseudocode)
+
+**pseudocode** 
+   
+| *function one_enz_binding_site(dna, enzyme)*
+|     *if enzyme binding site is substring of dna*
+|          *return of first position of substring in dna* 
+ 
+**implementation**
+ 
+.. literalinclude:: _static/code/restriction.py
+   :linenos:
+   :lines: 1-8
+   :language: python
+   
+* improve the previous function to return all positions of binding sites
+
+**pseudocode of first algorithm**
+
+| *function one_enz_binding_sites(dna, enzyme)*
+|     *positions <- empty*
+|     *if enzyme binding site is substring of dna*
+|          *add the position of the first substring in dna in positions* 
+|     *positions <- find binding_sites in rest of dna sequence*
+|     *return positions*  
+
+**implementation**
+
+.. literalinclude:: _static/code/restriction.py
+   :linenos:
+   :lines: 9-16
+   :language: python
+
+**pseudocode of second algorithm**
+
+| *function one_enz_binding_sites(dna, enzyme)*
+|     *positions <- empty*
+|     *find first position of binding site in dna*
+|     *while we find binding site in dna*
+|         *add position of binding site to positions*
+|         *find first position of binding site in dna in rest of dna*
+|     *return positions*
+
+**implementation**
+
+.. literalinclude:: _static/code/restriction.py
+   :linenos:
+   :lines: 19-25
+   :language: python
+   
+   
+search all positions of Ecor1 binding sites in dna_1
+
+::
  
    import collections
    RestrictEnzyme = collections.namedtuple("RestrictEnzyme", "name comment sequence cut end")
 
    ecor1 = RestrictEnzyme("EcoRI", "Ecoli restriction enzime I", "gaattc", 1, "sticky")
+   
+   dna_1 = """tcgcgcaacgtcgcctacatctcaagattcagcgccgagatccccgggggttgagcgatccccgtcagttggcgtgaattcag
+   cagcagcgcaccccgggcgtagaattccagttgcagataatagctgatttagttaacttggatcacagaagcttccaga
+   ccaccgtatggatcccaacgcactgttacggatccaattcgtacgtttggggtgatttgattcccgctgcctgccagg"""
+   
+   
+* generalize the binding sites function to take a list of enzymes and return a list of tuple (enzyme name, position) 
+   
+**pseudocode**
+
+| *function binding_sites(dna, set of enzymes)*
+|     *positions <- empty*
+|     *for each enzyme in enzymes*
+|         *pos <- one_enz_binding_sites(dna, enzyme)*
+|         *pos <- for each position create a tuple enzyme name, position*
+|         *positions <- pos*
+|     *return positions*
+
+**implementation**
+
+in bonus we can try to sort the list in the order of the position of the binding sites like this:
+[('Sau3aI', 38), ('SmaI', 42), ('Sau3aI', 56), ('EcoRI', 75), ...
+
+.. literalinclude:: _static/code/restriction.py
+   :linenos:
+   :lines: 27-
+   :language: python
+   
+::
+ 
+   import collections
+   RestrictEnzyme = collections.namedtuple("RestrictEnzyme", "name comment sequence cut end")
+
+   ecor1 = RestrictEnzyme("EcoRI", "Ecoli restriction enzime I", "gaattc", 1, "sticky")   
    ecor5 = RestrictEnzyme("EcoRV", "Ecoli restriction enzime V", "gatatc", 3, "blunt")
    bamh1 = RestrictEnzyme("BamHI", "type II restriction endonuclease from Bacillus amyloliquefaciens ", "ggatcc", 1, "sticky")
    hind3 = RestrictEnzyme("HindIII", "type II site-specific nuclease from Haemophilus influenzae", "aagctt", 1 , "sticky")
@@ -72,77 +198,17 @@ and the 2 dna fragments: ::
    attcagtggcttcagaattcctcccgggagaagctgaatagtgaaacgattgaggtgttgtggtgaaccgagtaag
    agcagcttaaatcggagagaattccatttactggccagggtaagagttttggtaaatatatagtgatatctggcttg"""
 
-| which enzymes cut the dna_1 get the name of the enzymes and all their positions of binding site?
-|                  the dna_2 ?
-|                  the dna_1 but not the dna_2?
-
-
-::
+   enzymes= (ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1)
+   binding_sites(dna_1, enzymes)
+   [('Sau3aI', 38), ('SmaI', 42), ('Sau3aI', 56), ('EcoRI', 75), ('SmaI', 95), ('EcoRI', 105), 
+   ('Sau3aI', 144), ('HindIII', 152), ('BamHI', 173), ('Sau3aI', 174), ('BamHI', 193), ('Sau3aI', 194)]
 
-   dna_1 = dna_1.replace('\n', '')
-   dans_2 = dna_2.replace('\n', '')
+   binding_sites(dna_2, enzymes)
+   [('EcoRI', 11), ('NotI', 33), ('HaeIII', 35), ('EcoRI', 98), ('SmaI', 106), 
+   ('EcoRI', 179), ('HaeIII', 193), ('EcoRV', 225)]
    
-   enzymes = [ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1]
-   digest_1 = []
-   for enz in enzymes:
-      pos = dna_1.find(enz.sequence)
-      if pos != -1:
-         digest_1.append(enz)
-
-with this first algorithm we find if an enzyme cut the dna but we cannot find all cuts in the dna for an enzyme.
-If we find a cutting site, we must search again starting at the first nucleotid after the begining of the match 
-until the end of the the dna, for this we use the start parameter of the find function, and so on. 
-As we don't know how many loop we need to scan the dna until the end we use a ``while`` loop testing for the presence of a cutting site.::  
-
-   digest_1 = []
-   for enz in enzymes:
-      pos = dna_1.find(enz.sequence)
-      while pos != -1:
-         digest_1.append(enz)
-         pos = dna_1.find(enz.sequence, pos + 1)
-         
-   digest_2 = []
-   for enz in enzymes:
-      pos = dna_2.find(enz.sequence)
-      while pos != -1:
-         digest_2.append(enz)
-         pos = dna_2.find(enz.sequence, pos + 1)  
-                
-   cut_dna_1 = set(digest_1)
-   cut_dna_2 = set(digest_2)
-   cut_dna_1_not_dna_2 = cut_dna_1 - cut_dna_2
-         
-         
-but we want also the position, for instance to compute the fragments of dna. ::
-
-   digest_1 = []
-   for enz in enzymes:
-      pos = dna_1.find(enz.sequence)
-      while pos != -1:
-         digest_1.append((enz, pos))
-         pos = dna_1.find(enz.sequence, pos + 1)
-    
-   #if we want to sort the list in function of their positions in the sequence 
-   from operator import itemgetter
-   digest_1.sort(key=itemgetter(1))
-   print [(e.name, pos) for e, pos in digest_1]
+:download:`restriction.py <_static/code/restriction.py>` .
 
-   
-   digest_2 = []
-   for enz in enzymes:
-      pos = dna_2.find(enz.sequence)
-      while pos != -1:
-         digest_2.append((enz, pos))
-         pos = dna_2.find(enz.sequence, pos + 1)
-   
-   print "list of all enzymes cutting dna 1 and theirs position in dna1 :", [(e.name, pos) for e, pos in digest_1]
-   print "list of all enzymes cutting dna 2 and theirs position in dna2 :", [(e.name, pos) for e, pos in digest_2]
-           
-   cut_dna_1 = set([e.name for e, pos in digest_1])
-   cut_dna_2 = set([e.name for e, pos in digest_2])
-   
-   cut_dna_1_not_dna_2 = cut_dna_1 - cut_dna_2
-   
 
 Exercise
 --------
diff --git a/source/Data_Types.rst b/source/Data_Types.rst
index 9fd039c..65de161 100644
--- a/source/Data_Types.rst
+++ b/source/Data_Types.rst
@@ -195,7 +195,7 @@ without header or any non sequence characters
 
 pseudocode:
 
-|   *fasta_to_one_line(seq)*
+|   *function fasta_to_one_line(seq)*
 |      *header_end_at <- find the first return line character*
 |      *raw_seq <- remove header from sequence*
 |      *raw_seq <- remove non sequence chars*
diff --git a/source/Creating_and_Calling_Functions.rst b/source/Dive_into_Functions.rst
similarity index 97%
rename from source/Creating_and_Calling_Functions.rst
rename to source/Dive_into_Functions.rst
index 2d1d744..34a4446 100644
--- a/source/Creating_and_Calling_Functions.rst
+++ b/source/Dive_into_Functions.rst
@@ -1,8 +1,8 @@
-.. _Creating_and_Calling_Functions:
+.. _Dive_into_Functions:
 
-******************************
-Creating and Calling Functions
-******************************
+*******************
+Dive into Functions
+*******************
 
 Exercises
 =========
@@ -105,7 +105,7 @@ As soon as you make an assignment to a variable in a scope,
 that variable becomes local to that scope and shadows any similarly named variable in the outer scope.
 even if the assignment appear later in code.
 Here *x = y* make *x* as local variable whatever you are in func.
-so at line  *y = x + 2* we try to use the loca variable *x* but we have to asign it a value (it is done later) so
+so at line  *y = x + 2* we try to use the local variable *x* but we have to asign it a value (it is done later) so
 Python raise an UnboundLocalError (`see python faq for details <https://docs.python.org/3/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value>`_) 
 
 .. container:: clearer
diff --git a/source/Modules_and_Packages.rst b/source/Modules_and_Packages.rst
index b3e1718..53734b9 100644
--- a/source/Modules_and_Packages.rst
+++ b/source/Modules_and_Packages.rst
@@ -27,22 +27,13 @@ Exercise
 
 Write a program that calculates the similarity of 2 RNA sequences.
 
-* To compute the simalirity you need to parse a file containing the similarity matrix.
+* To compute the simalirity you need to parse a file containing the :download:`similarity matrix <_static/data/similarity_matrix>`.
+  **Hint**: use the module containing the functions that handle a matrix from previous chapter.
+  put this matrix.py file in a directory named "my_python_lib" in your home or Desktop
+  and import it in your current program (the similarity script must be placed elsewhere).
 * The similarity of the 2 sequences is the sum of base similarities. 
-  so you have to compare the first base of to sequence and use the matrix to get the similarity
+  so you have to compare the first base of two sequences and use the matrix to get the similarity
   from the similarity table, on so on for all bases then sum these similarities.
-  
-.. note::
-   as we  don't yet see how to read a file, we provide a list of strings that represents the file
-   as we can get them if we read that file.
-   
-::
-
-   lines = iter(['  A G C U\n'
-                 'A 1.0 0.5 0.0 0.0\n',
-                 'G 0.5 1.0 0.0 0.0\n',
-                 'C 0.0 0.0 1.0 0.5\n',
-                 'U 0.0 0.0 0.5 1.0\n'])
 
 .. literalinclude:: _static/code/similarity.py
    :linenos:
diff --git a/source/_static/code/codons.py b/source/_static/code/codons.py
new file mode 100644
index 0000000..8973486
--- /dev/null
+++ b/source/_static/code/codons.py
@@ -0,0 +1,10 @@
+
+def all_codons():
+    all_codons = []
+    alphabet = 'acgt'
+    for base_1 in alphabet:
+        for base_2 in alphabet:
+            for base_3 in alphabet:
+                codon = base_1 + base_2 + base_3
+                all_codons.append(codon)
+    return all_codons
\ No newline at end of file
diff --git a/source/_static/code/codons_itertools.py b/source/_static/code/codons_itertools.py
new file mode 100644
index 0000000..317d383
--- /dev/null
+++ b/source/_static/code/codons_itertools.py
@@ -0,0 +1,6 @@
+from itertools import product
+
+def all_codons():
+    alphabet = 'acgt'
+    all_codons = [ ''.join(codon) for codon in product(alphabet, repeat = 3)]
+    return all_codons
\ No newline at end of file
diff --git a/source/_static/code/enzyme_1.py b/source/_static/code/enzyme_1.py
new file mode 100644
index 0000000..09667e3
--- /dev/null
+++ b/source/_static/code/enzyme_1.py
@@ -0,0 +1,12 @@
+
+
+def one_line(seq):
+    return seq.replace('\n', '')
+
+def enz_filter(enzymes, dna):
+    cuting_enz = []
+    for enz in enzymes:
+        if enz.sequence in dna: 
+            cuting_enz.append(enz)
+    return cuting_enz
+
diff --git a/source/_static/code/kmer.py b/source/_static/code/kmer.py
index d1e11b6..02dc134 100644
--- a/source/_static/code/kmer.py
+++ b/source/_static/code/kmer.py
@@ -1,8 +1,12 @@
-import collections
 
-def kmer(sequence, k):
-    kmers = collection.defaultdict(int)
-    for i in range(len(sequence) - k):
-        kmer = sequence[i:i + k]
+def get_kmer_occurences(seq, kmer_len):
+    """
+    return a list of tuple 
+    each tuple contains a kmers present in seq and its occurence
+    """
+    kmers = {}
+    stop = len(seq) - kmer_len
+    for i in range(stop + 1):
+        kmer = s[i : i + kmer_len]
         kmers[kmer] = kmers.get(kmer, 0) + 1
-    return kmers
\ No newline at end of file
+    return kmers.items()
\ No newline at end of file
diff --git a/source/_static/code/kmer_2.py b/source/_static/code/kmer_2.py
new file mode 100644
index 0000000..2f98d53
--- /dev/null
+++ b/source/_static/code/kmer_2.py
@@ -0,0 +1,17 @@
+import collections
+from operator import itemgetter
+
+def get_kmer_occurences(seq, kmer_len):
+    """
+    return a list of tuple 
+    each tuple contains a kmers present in seq and its occurence
+    """
+    kmers = collections.defaultdict(int)
+    stop = len(seq) - kmer_len
+    for i in range(stop + 1):
+        kmer = s[i : i + kmer_len]
+        kmers[kmer] += 1
+    kmers = kmers.items()
+    kmers.sort(key = itemgetter(1), reverse =True)
+    return kmers
+        
\ No newline at end of file
diff --git a/source/_static/code/restriction.py b/source/_static/code/restriction.py
new file mode 100644
index 0000000..26e228f
--- /dev/null
+++ b/source/_static/code/restriction.py
@@ -0,0 +1,50 @@
+from operator import itemgetter
+
+
+def one_enz_binding_site(dna, enzyme):
+    """
+    return the first position of enzyme binding site in dna
+    or None if there is not
+    """
+    pos = dna.find(enzyme.sequence)
+    if pos != -1:
+        return pos
+
+
+def one_enz_binding_sites1(dna, enzyme):
+    """
+    return all positions of enzyme binding sites in dna
+    """
+    positions = []
+    pos = dna.find(enzyme.sequence)
+    if pos != -1:
+        positions.append(pos)
+        positions.extend(one_enz_binding_site1(dna[pos+1:], enzyme))
+    return positions
+        
+        
+def one_enz_binding_sites(dna, enzyme):
+    """
+    return all positions of enzyme binding sites in dna
+    """
+    positions = []
+    pos = dna.find(enzyme.sequence)
+    while pos != -1:
+        positions.append(pos)
+        pos = dna.find(enzyme.sequence, pos + 1)
+    return positions
+
+
+def binding_sites(dna, enzymes):
+    """
+    return all positions of all enzymes binding sites present in dna
+    sort by the incresing position
+    """
+    positions = []
+    for enzyme in enzymes:
+        pos = one_enz_binding_sites(dna, enzyme)
+        pos = [(enzyme.name, pos) for pos in pos]
+        positions.extend(pos)
+    positions.sort(key = itemgetter(1))
+    return positions 
+
diff --git a/source/_static/code/rev_comp.py b/source/_static/code/rev_comp.py
new file mode 100644
index 0000000..dd0337e
--- /dev/null
+++ b/source/_static/code/rev_comp.py
@@ -0,0 +1,15 @@
+
+def rev_comp(seq):
+    """
+    return the reverse complement of seq
+    the sequence must be in lower case
+    """
+    complement = {'a' : 't',
+                  'c' : 'g',
+                  'g' : 'c',
+                  't' : 'a'}
+    rev_seq = seq[::-1]
+    rev_comp = ''
+    for nt in rev_seq:
+        rev_comp += complement[nt]
+    return rev_comp
\ No newline at end of file
diff --git a/source/_static/code/rev_comp2.py b/source/_static/code/rev_comp2.py
new file mode 100644
index 0000000..59ea1a1
--- /dev/null
+++ b/source/_static/code/rev_comp2.py
@@ -0,0 +1,17 @@
+import string
+
+def rev_comp(seq):
+    """
+    return the reverse complement of seq
+    the case is respect but if the sequence mix upper and lower case the function will failed
+    """
+    upper = seq.isupper()
+    reverse = seq[::-1]
+    direct = 'acgt'
+    comp = 'tgca'
+    if upper:
+        table = string.maketrans(direct.upper(), comp.upper())
+    else:
+        table = string.maketrans(direct, comp)
+    rev_comp = reverse.translate(table)
+    return rev_comp
\ No newline at end of file
diff --git a/source/_static/code/similarity.py b/source/_static/code/similarity.py
index b46d1a0..286742a 100644
--- a/source/_static/code/similarity.py
+++ b/source/_static/code/similarity.py
@@ -1,26 +1,27 @@
+import sys
+import os.path
+
+sys.path.insert(0, os.path.join(expanduser('~'), "my_python_lib"))
+
 import matrix
 
-lines = iter( ['  A G C U\n',
-               'A 1.0 0.5 0.0 0.0\n',
-               'G 0.5 1.0 0.0 0.0\n',
-               'C 0.0 0.0 1.0 0.5\n',
-               'U 0.0 0.0 0.5 1.0\n']
-             )
 
-def parse_similarity_file():
+def parse_similarity_file(path):
     """
     parse file containing RNA similarity matrix and return a matrix
     """
     sim_matrix = matrix.create(4, 4)
-    #skip first line
-    lines.next()
-    for row_no, line in enumerate(lines):
-        line = line.strip()
-        fields = line.split()
-        values = [float(val) for val in fields[1:]]
-        matrix.replace_row(sim_matrix, row_no, values)
+    with open(path, 'r') as sim_file:
+        #skip first line
+        sim_file.next()
+        for row_no, line in enumerate(sim_file):
+            line = line.strip()
+            fields = line.split()
+            values = [float(val) for val in fields[1:]]
+            matrix.replace_row(sim_matrix, row_no, values)
     return sim_matrix
 
+
 def get_similarity(b1, b2, sim_matrix):
     """
     :param b1: the first base must be in ('A', 'G', 'C', 'U')
@@ -40,6 +41,7 @@ def get_similarity(b1, b2, sim_matrix):
     if not b2 in bases:
         raise KeyError("unknown base b2: " + str(b2))
     return matrix.get_cell(sim_matrix, bases[b1], bases[b2])
+                      
                            
 def compute_similarity(seq1, seq2, sim_matrix):
     """
@@ -58,12 +60,13 @@ def compute_similarity(seq1, seq2, sim_matrix):
         sim = get_similarity(b1, b2, sim_matrix)
         similarities.append(sim)
     return sum(similarities)
+       
             
 if __name__ == '__main__':
     seq1 = 'AGCAUCUA'
     seq2 = 'ACCGUUCU'
-    sim_matrix = parse_similarity_file()
+    sim_matrix = parse_similarity_file("similarity_matrix")
     print matrix.to_str(sim_matrix)
     similarity = compute_similarity(seq1, seq2, sim_matrix)
     print similarity
-            
\ No newline at end of file
+            
diff --git a/source/_static/code/translate.py b/source/_static/code/translate.py
index d423890..288a065 100644
--- a/source/_static/code/translate.py
+++ b/source/_static/code/translate.py
@@ -19,17 +19,21 @@ genetic_code = {  'ttt': 'F', 'tct': 'S', 'tat': 'Y', 'tgt': 'C',
 def translate(nuc_seq, code):
     
     prot_seq = ''
-    start = 0
-    while (start + 2) < len(nuc_seq):
+    n = 0
+    # to avoid to compute len(seq)/3 at each loop
+    # I compute it once and use a reference
+    # it could be expensive if the sequence is very long.
+    cycle = len(nuc_seq)/3
+    while n < cycle:
+        start = n * 3
         end = start + 3
-        print start, end
         codon = nuc_seq[start:end]
         codon = codon.lower()
         if codon in code:
             prot_seq += code[codon] 
         else:
             raise RuntimeError("unknow codon: " + codon)
-        start += 3
+        n += 1
     return prot_seq
         
 def translate2(nuc_seq, code, phase = 1):
@@ -39,7 +43,9 @@ def translate2(nuc_seq, code, phase = 1):
     elif -4 < phase < 0:
         start = -phase - 1
         nuc_seq = nuc_seq[::-1]
-    while(start + 2) < len(nuc_seq):
+    # an other way to determine the end of looping
+    stop_iteration = len(nuc_seq)
+    while (start + 2) < stop_iteration:
         end = start + 3
         codon = nuc_seq[start:end].lower()
         if codon in code:
@@ -47,4 +53,4 @@ def translate2(nuc_seq, code, phase = 1):
         else:
             raise RuntimeError("unknow codon")
         start += 3        
-    return prot_seq
\ No newline at end of file
+    return prot_seq
diff --git a/source/_static/code/uniqify.py b/source/_static/code/uniqify.py
new file mode 100644
index 0000000..299d4c3
--- /dev/null
+++ b/source/_static/code/uniqify.py
@@ -0,0 +1,6 @@
+def uniqify(l):
+    uniq = []
+    for item in l:
+       if item not in uniq:
+          uniq.append(item)
+    return (uniq)
\ No newline at end of file
diff --git a/source/_static/data/similarity_matrix b/source/_static/data/similarity_matrix
new file mode 100644
index 0000000..aa60f6e
--- /dev/null
+++ b/source/_static/data/similarity_matrix
@@ -0,0 +1,5 @@
+   A   G   C   U
+A 1.0 0.5 0.0 0.0
+G 0.5 1.0 0.0 0.0
+C 0.0 0.0 1.0 0.5
+U 0.0 0.0 0.5 1.0
diff --git a/source/_static/figs/augmented_assignment_int2.png b/source/_static/figs/augmented_assignment_int2.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a7d3d457ca9c70aa814c1cca7bfa870a8d37101
GIT binary patch
literal 29487
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%0DPM$t5c{<4)bxzRURmV5-&@{>ugtLjCy2u;Rm-ls
ztE*41(dAs<mCtaz(sI7?Pt(GC0P+giqpz>4)9naAwCi^~-w<>Ccv1O%5IAovcAstu
z@HcKd#_32@`OTJUhXZE}vTBkfqycy}J9}h!SeDq8PO7x8?~Cg-b%mk9^}+OZIVu8z
zi&?-ea0}k{OqoKS9MQdw?J5UAOXw*7#qC!r$`XQr|1p97J6C?Z=)aKK()MxpebBOv
zb!{sO{@4JTN~T1To}PY@s-b9?#_Ottwg{kPor{Z_UO%4x+G%!f_+F&2TPi&tDD|~J
zTk@PQ|4!*+qV`o4U=?we4}6NN9=bCJa~R@Mmad?OI}M*XlGvB~1Ni{a-!&c{9$TjT
zWSly+H|H_r61oNk<fFCN@~~$4*~VeH8GHdGV)+Ykogoz1y0@ZsW|~~2ChBT16@_nb
z7i?&2tH96L*wsDb?up2H^n}-oK}KfNiQgOz&W}IAVpCzD5GtO<TKmBLc<H(FBSNw$
z$~7VU%<pDMwF@T*dk09k%1*EVsvm-cFirtnZ$}@T3l36zdMx~zlti8Q{CL|rIEXAK
zCkNuH53c%Cn|c%bD@e089v!-s-xJ!%u{c=1mtCaD+m8G2#IcxwFp7o%T}Uy9z2$xe
zLwraLfc+GONa2`6DL|`^L<SXt0daBGw;5Fqx=*8SxIvKw8{zWBnU7nw^vB~)RwBGe
z4_Li7Bwaz1PJ0`}lRUsC2>B)>0$IDGIu;TkVdnt#v$9zC+@j3R3Fq^ccnQvx!@L#%
zz+j9Q{lun3J<wnK6?u1mOAcD(!^n^+j6h-^aFA`pjNJA|U;B!$yEH^HJZN(M;|&tr
zo1QO3t`)Lm&hf?^DdzSSfG_Ll(8ROb!=F>n(mHIo%Z=ottLJ5V8^Q{i4z@V;?4N|M
zE_81~|G(0YNCLN*)oa?Hprlpd3IX8dveF3ltqUX^Xl*RIr$T;on76n5CrkM+fB65(
zGr}EWc?_tEq~WN(dZow5cjrimiU#^cs|`P)&){Kkygu4GIk9Kw<fvl-131MmmY<lK
z3dqX(KrG-jME(V68)m{A7BM)hi+yx-<Z=aMMZaRdjrD)0MX}$%!t<-9LC7VNvj8_>
OLP(0qiIxiM`uz{%SHxTZ

literal 0
HcmV?d00001

diff --git a/source/_static/figs/augmented_assignment_list2.png b/source/_static/figs/augmented_assignment_list2.png
new file mode 100644
index 0000000000000000000000000000000000000000..14e73407319b7d0d73fd8cfb4d3400448d5db6d9
GIT binary patch
literal 35453
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

literal 0
HcmV?d00001

diff --git a/source/index.rst b/source/index.rst
index df46468..e100204 100644
--- a/source/index.rst
+++ b/source/index.rst
@@ -18,7 +18,7 @@ Contents:
    Collection_Data_Types
    Logical_Operations
    Control_Flow_Statements
-   Creating_and_Calling_Functions
+   Dive_into_Functions
    Modules_and_Packages
    Input_Output
    
-- 
GitLab