# -*- coding: utf-8 -*-
"""
Débuté le Thu Oct  2 08:52:56 2014

@author: Pierre-Henri Jondot
"""

def memoize(f):
    cache = {}
    def wrapper(*args):
        if args not in cache:
            cache[args] = f(*args)
        return cache[args]
    wrapper.__name__ = f.__name__
    return wrapper
    
def trace(f):
    def wrapper(*args):
        print('Entree dans fonction {0} avec pour arguments {1}'\
           .format(f.__name__, args))
        sortie = f(*args)
        print('Sortie de fonction {0}, arguments {1} valeur de sortie {2} :'\
          .format(f.__name__, args, sortie))
        return sortie
    wrapper.__name__ = f.__name__
    return wrapper
    
