In [7]:
# Males' preference orders over females [0, 1, 2] and unmatched
m_unmatched = 3
m_prefs = [[0, 1, 2, m_unmatched],
                        [2, 0, 1, m_unmatched],
                        [1, 2, 0, m_unmatched],
                        [2, 0, 1, m_unmatched]]
        # Females' preference orders over males [0, 1, 2, 3] and unmatched
f_unmatched = 4
f_prefs = [[2, 0, 1, 3, f_unmatched],
                        [0, 1, 2, 3, f_unmatched],
                        [2, f_unmatched, 1, 0, 3]]

In [8]:
for i in range(len(m_prefs)):
    m_prefs[i].reverse()
print m_prefs
single = range(len(m_prefs))
x = single[-1]
print single
print x


[[3, 2, 1, 0], [3, 1, 0, 2], [3, 0, 2, 1], [3, 1, 0, 2]]
[0, 1, 2, 3]
3

In [9]:
range(len(m_prefs))


Out[9]:
[0, 1, 2, 3]

In [18]:
arg1 = []
arg1.append(1)
arg1


Out[18]:
[1]

In [11]:
[-1 for z in f_prefs]


Out[11]:
[-1, -1, -1]

In [3]:
def deferred_acceptance(arg1, arg2):
    import numpy as np
    
    single = np.argsort(arg1)
    pair = np.argsort(arg2)
    
    for i in len(pair):
        pair[i] = -1
    
    while len(single)>0:
        x = single.pop()
        y = arg1[x].pop()
        if pair[y] != -1:
            if arg2[y].index(pair[y]) < arg2[y].index(x):
                single.insert(0, pair[y])
                pair[y] = x
            else:
                single.insert(0, x)
        else:
            pair[y] = x
     
    arg1 = np.argsort(pair)
    arg2 = pair

In [4]:
def test_male_proposal(f):
        m_matched_computed, f_matched_computed = \
            deferred_acceptance(self.m_prefs, self.f_prefs)
        assert_array_equal(m_matched_computed, self.m_matched)
        assert_array_equal(f_matched_computed, self.f_matched)

In [6]:
deferred_acceptance(self.m_prefs, self.f_prefs)


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-6-6b539f573781> in <module>()
----> 1 deferred_acceptance(self.m_prefs, self.f_prefs)

NameError: name 'self' is not defined

In [ ]: