def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' from hw4 import exchange steps = list() S_temp = list(S) for injected in B: B_temp = list(B) B_temp.remove(injected) ejected = exchange(S_temp,B_temp,injected) S_temp.remove(ejected) S_temp.append(injected) step = (injected,ejected) steps.append(step) return steps
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' T = [] M = [] C = S.copy() for b in B: t1 = hw4.exchange(C, T, b) T.append(b) C.remove(t1) C.append(b) M.append((b, t1)) return M
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' A = [] copyS = list(S) result = [] for z in B: w = exchange(copyS,A,z) result.append((z,w)) copyS.remove(w) copyS.append(z) A.append(w) return result
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' A = [] Sprime = S[:] ret = [] while len(A) < len(B): for vec in B: A.append(vec) if is_independent(A): A.pop() ejected = exchange(Sprime, A, vec) Sprime[Sprime.index(ejected)] = vec ret.append((vec, ejected)) A.append(vec) else: A.pop() return ret
def morph(S, B): """ Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] """ S_new = list(S) pairs = list() A = list() for j in range(len(B)): z = B[j] w = exchange(S_new, A, z) A.append(z) pairs.append((z, w)) S_new[S_new.index(w)] = z return pairs
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' ret = [] A = [] SS = [x for x in S] #the grader does not like S being touched for z in B: w = exchange(SS,A,z) if w is None: break else: A.append(z) SS.remove(w) SS.append(z) ret.append((z,w)) return ret
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' Z,W = list(),list() Sk = S.copy() for z in B: Sk.append(z) w = exchange(Sk,B,z) Sk.remove(w) Z.append(z) W.append(w) return [(z,w) for (z,w) in zip(Z,W)]
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' from hw4 import exchange steps = list() S_temp = list(S) for injected in B: B_temp = list(B) B_temp.remove(injected) ejected = exchange(S_temp, B_temp, injected) S_temp.remove(ejected) S_temp.append(injected) step = (injected, ejected) steps.append(step) return steps
def morph(S, A): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' T=S[:]; b=[] for x in A: a=exchange(T, A, x) T.remove(a) T.append(x) b.append((x,a)) return b
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' from hw4 import exchange S_copy = S.copy() veclist = [] protected = [] for z in B: w = exchange(S_copy, protected, z) S_copy.append(z) # vector to be injected from B into S protected.append(z) # remember injected vector from B S_copy.remove(w) # vector to be ejected from S veclist.append((z, w)) return veclist
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' from hw4 import exchange output = [] for z in B: output = output + [(z, exchange(S,B,z))] return output
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' result=[] for z in B: w=exchange(S,B,z) #S.append(z) #S.remove(w) result.append((z,w)) return result
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' from hw4 import exchange ieList = [] #list of 2 element vector tuples where tuple[0] == injected vector and tuple[1] == ejected vector copyS = S[:] for vector in B: ieList.append((vector,exchange(copyS,B,vector))) return ieList
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' T=[] C=S.copy() for i,vector in enumerate(B): z=B[i] w=exchange(C,B,z) T.append((z,w)) return T
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' A = list() inject_eject_list = list() from hw4 import exchange for i in range(len(B)): w = exchange(S, A, B[i]) inject_eject_list.append((B[i],w)) return inject_eject_list
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' from hw4 import exchange ieList = [ ] #list of 2 element vector tuples where tuple[0] == injected vector and tuple[1] == ejected vector copyS = S[:] for vector in B: ieList.append((vector, exchange(copyS, B, vector))) return ieList
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' T=[x for x in S] result = [] for z in B : w=exchange(T, [i for i in B if i != z], z) T.remove(w) T += [z] result.append((z,w)) return result
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' result = [] T=S[:] for inject in B: eject=hw4.exchange(T,B,inject) T.remove(eject) T=T+[inject] result+=[(inject,eject)] return result
def morph(S, B): """ Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] """ A = list() inject_eject_list = list() from hw4 import exchange for i in range(len(B)): w = exchange(S, A, B[i]) inject_eject_list.append((B[i], w)) return inject_eject_list
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' result = [] T = S[:] for inject in B: eject = hw4.exchange(T, B, inject) T.remove(eject) T = T + [inject] result += [(inject, eject)] return result
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' ejectList = [] A = [] for iVec in B: ejectVec = exchange(S, A, iVec) A.append(iVec) ejectList.append((iVec, ejectVec)) return ejectList
def morph(S, B): """ Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] """ ejectList = [] A = [] for iVec in B: ejectVec = exchange(S, A, iVec) A.append(iVec) ejectList.append((iVec, ejectVec)) return ejectList