In [33]:
import sklearn
import json
import operator

In [46]:
agent11 = sklearn.externals.joblib.load('agent1_independent_more')
agent12 = sklearn.externals.joblib.load('agent1_independent_two')
agent13 = sklearn.externals.joblib.load('agent1_independent_three')
one = [agent11, agent12, agent13]
agent21 = sklearn.externals.joblib.load('agent2_independent_more')
agent22 = sklearn.externals.joblib.load('agent2_independent_two')
agent23 = sklearn.externals.joblib.load('agent2_independent_three')
two = [agent21, agent22, agent23]

In [48]:
def loader(dictionary):
    def load_keys(k):
        unjsoned = json.loads(k)
        loaded = tuple( ((tuple(unjsoned[0])), unjsoned[1] ))
        return loaded
    return {load_keys(k):v for k,v in dictionary.items()}
loaded1 = [loader(i) for i in one]
loaded2 = [loader(i) for i in two]
def get_winners(dictionary):
    states = set([k[0] for k,v in dictionary.items()])
    winners = {}
    for s in states:
        matches = [(v, k[1]) for k,v in dictionary.items() if k[0]==s]
        winners[s] = sorted(matches, key=operator.itemgetter(0))[::-1]
    return {k: v[0][1] for k,v in winners.items()}

In [49]:
[get_winners(j) for j in loaded1]


Out[49]:
[{(0, 'running', 'sleeping'): 'noop',
  (0, 'sleeping', 'sleeping'): 'noop',
  (1, 'running', 'sleeping'): 'go_to_sleep',
  (1, 'sleeping', 'sleeping'): 'noop',
  (2, 'running', 'sleeping'): 'noop',
  (2, 'sleeping', 'sleeping'): 'wakeup',
  (3, 'running', 'sleeping'): 'noop',
  (3, 'sleeping', 'sleeping'): 'wakeup',
  (4, 'running', 'sleeping'): 'noop',
  (4, 'sleeping', 'sleeping'): 'wakeup',
  (5, 'running', 'sleeping'): 'noop',
  (5, 'sleeping', 'sleeping'): 'wakeup',
  (6, 'running', 'sleeping'): 'noop',
  (6, 'sleeping', 'sleeping'): 'wakeup',
  (7, 'running', 'sleeping'): 'noop',
  (7, 'sleeping', 'sleeping'): 'wakeup',
  (8, 'running', 'sleeping'): 'noop',
  (8, 'sleeping', 'sleeping'): 'wakeup',
  (9, 'running', 'sleeping'): 'noop',
  (9, 'sleeping', 'sleeping'): 'wakeup'},
 {(0, 'running', 'sleeping'): 'noop',
  (0, 'sleeping', 'sleeping'): 'noop',
  (1, 'running', 'sleeping'): 'go_to_sleep',
  (1, 'sleeping', 'sleeping'): 'noop',
  (2, 'running', 'sleeping'): 'noop',
  (2, 'sleeping', 'sleeping'): 'wakeup',
  (3, 'running', 'sleeping'): 'noop',
  (3, 'sleeping', 'sleeping'): 'wakeup',
  (4, 'running', 'sleeping'): 'noop',
  (4, 'sleeping', 'sleeping'): 'wakeup',
  (5, 'running', 'sleeping'): 'noop',
  (5, 'sleeping', 'sleeping'): 'wakeup',
  (6, 'running', 'sleeping'): 'noop',
  (6, 'sleeping', 'sleeping'): 'wakeup',
  (7, 'running', 'sleeping'): 'noop',
  (7, 'sleeping', 'sleeping'): 'wakeup',
  (8, 'running', 'sleeping'): 'noop',
  (8, 'sleeping', 'sleeping'): 'wakeup',
  (9, 'running', 'sleeping'): 'noop',
  (9, 'sleeping', 'sleeping'): 'noop',
  (10, 'running', 'sleeping'): 'noop',
  (10, 'sleeping', 'sleeping'): 'wakeup'},
 {(0, 'running', 'sleeping'): 'noop',
  (0, 'sleeping', 'sleeping'): 'noop',
  (1, 'running', 'sleeping'): 'go_to_sleep',
  (1, 'sleeping', 'sleeping'): 'noop',
  (2, 'running', 'sleeping'): 'noop',
  (2, 'sleeping', 'sleeping'): 'wakeup',
  (3, 'running', 'sleeping'): 'noop',
  (3, 'sleeping', 'sleeping'): 'wakeup',
  (4, 'running', 'sleeping'): 'noop',
  (4, 'sleeping', 'sleeping'): 'wakeup',
  (5, 'running', 'sleeping'): 'noop',
  (5, 'sleeping', 'sleeping'): 'wakeup',
  (6, 'running', 'sleeping'): 'noop',
  (6, 'sleeping', 'sleeping'): 'wakeup',
  (7, 'running', 'sleeping'): 'noop',
  (7, 'sleeping', 'sleeping'): 'wakeup',
  (8, 'running', 'sleeping'): 'noop',
  (8, 'sleeping', 'sleeping'): 'noop',
  (9, 'running', 'sleeping'): 'noop',
  (9, 'sleeping', 'sleeping'): 'noop',
  (10, 'running', 'sleeping'): 'noop',
  (10, 'sleeping', 'sleeping'): 'noop'}]

In [50]:
[get_winners(j) for j in loaded2]


Out[50]:
[{(0, 'running', 'sleeping'): 'noop',
  (0, 'sleeping', 'sleeping'): 'noop',
  (1, 'running', 'sleeping'): 'go_to_sleep',
  (1, 'sleeping', 'sleeping'): 'noop',
  (2, 'running', 'sleeping'): 'noop',
  (2, 'sleeping', 'sleeping'): 'wakeup',
  (3, 'running', 'sleeping'): 'noop',
  (3, 'sleeping', 'sleeping'): 'wakeup',
  (4, 'running', 'sleeping'): 'noop',
  (4, 'sleeping', 'sleeping'): 'wakeup',
  (5, 'running', 'sleeping'): 'noop',
  (5, 'sleeping', 'sleeping'): 'wakeup',
  (6, 'running', 'sleeping'): 'noop',
  (6, 'sleeping', 'sleeping'): 'noop',
  (7, 'running', 'sleeping'): 'noop',
  (7, 'sleeping', 'sleeping'): 'noop',
  (8, 'running', 'sleeping'): 'noop',
  (8, 'sleeping', 'sleeping'): 'noop',
  (9, 'running', 'sleeping'): 'noop',
  (9, 'sleeping', 'sleeping'): 'wakeup',
  (10, 'running', 'sleeping'): 'noop',
  (10, 'sleeping', 'sleeping'): 'wakeup'},
 {(0, 'running', 'sleeping'): 'noop',
  (0, 'sleeping', 'sleeping'): 'noop',
  (1, 'running', 'sleeping'): 'go_to_sleep',
  (1, 'sleeping', 'sleeping'): 'noop',
  (2, 'running', 'sleeping'): 'noop',
  (2, 'sleeping', 'sleeping'): 'wakeup',
  (3, 'running', 'sleeping'): 'noop',
  (3, 'sleeping', 'sleeping'): 'wakeup',
  (4, 'running', 'sleeping'): 'noop',
  (4, 'sleeping', 'sleeping'): 'wakeup',
  (5, 'running', 'sleeping'): 'noop',
  (5, 'sleeping', 'sleeping'): 'wakeup',
  (6, 'running', 'sleeping'): 'noop',
  (6, 'sleeping', 'sleeping'): 'wakeup',
  (7, 'running', 'sleeping'): 'noop',
  (7, 'sleeping', 'sleeping'): 'wakeup',
  (8, 'running', 'sleeping'): 'noop',
  (8, 'sleeping', 'sleeping'): 'noop',
  (9, 'running', 'sleeping'): 'noop',
  (9, 'sleeping', 'sleeping'): 'wakeup',
  (10, 'running', 'sleeping'): 'noop'},
 {(0, 'running', 'sleeping'): 'go_to_sleep',
  (0, 'sleeping', 'sleeping'): 'noop',
  (1, 'running', 'sleeping'): 'go_to_sleep',
  (1, 'sleeping', 'sleeping'): 'noop',
  (2, 'running', 'sleeping'): 'noop',
  (2, 'sleeping', 'sleeping'): 'wakeup',
  (3, 'running', 'sleeping'): 'noop',
  (3, 'sleeping', 'sleeping'): 'wakeup',
  (4, 'running', 'sleeping'): 'noop',
  (4, 'sleeping', 'sleeping'): 'wakeup',
  (5, 'running', 'sleeping'): 'noop',
  (5, 'sleeping', 'sleeping'): 'wakeup',
  (6, 'running', 'sleeping'): 'noop',
  (6, 'sleeping', 'sleeping'): 'wakeup',
  (7, 'running', 'sleeping'): 'noop',
  (7, 'sleeping', 'sleeping'): 'noop',
  (8, 'running', 'sleeping'): 'noop',
  (8, 'sleeping', 'sleeping'): 'noop',
  (9, 'running', 'sleeping'): 'noop',
  (9, 'sleeping', 'sleeping'): 'noop',
  (10, 'running', 'sleeping'): 'noop',
  (10, 'sleeping', 'sleeping'): 'wakeup'}]

In [66]:
import asyncio
q = asyncio.Queue()
#q.put_nowait(2)
#q.put_nowait(3)

In [80]:
import functools
def compose(functions):
    """composes a list of functions from right to left"""
    return functools.reduce(lambda f, g: lambda x: f(g(x)), functions, lambda x: x)
def a(add, state):
    print(add)
    new= state+add
    return new
modifiers = [functools.partial(a,1), functools.partial(a,3)]
composition = compose(modifiers)

In [81]:
composition(4)


3
1
Out[81]:
8

In [ ]: