In [2]:
import random
import numpy as np
def normalize(arr):
s = sum(arr)
if s == 0:
s = 1
arr[0] = 1
for i, val in enumerate(arr):
arr[i] = val/s
return arr
def generate(width, height):
matrix = []
for i in range(height):
matrix.append([])
for j in range(width):
matrix[i].append(float(random.randint(0, 1000))/1000)
matrix[i] = normalize(matrix[i])
matrix[i] = [round(x, 3) for x in matrix[i]]
return np.matrix(matrix)
generate(4,4)
print normalize([.444,.45, .34, .0])
In [3]:
#input:num characters
#output: num personality matricies, and closeness vectors
def initialize(num):
out_matricies = []
for i in range(num * 2):
out_matricies.append(generate(4,4))
closeness_vectors = []
for x in range(num):
close_vector = []
for i in range(num):
if i == x:
close_vector.append(float(0))
else:
close_vector.append(float(random.randint(0,1000))/1000)
closeness_vectors.append(normalize(close_vector))
return out_matricies, closeness_vectors
initialize(2)
Out[3]:
In [10]:
def translate(num):
if num == 0:
return "Happy"
if num == 1:
return "Sad"
if num == 2:
return "Angry"
if num == 3:
return "Fear"
def translate_to_num(stringy):
if stringy == "Happy":
return 0
if stringy == "Sad":
return 1
if stringy == "Angry":
return 2
if stringy == "Fear":
return 3
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
Few things to keep aware of. People acessing things at the same time, take the earlier user's request, then discard the other guys request and then continue the chain.
In [5]:
#Intialization - creates db and then sends an empty response
s = """{
"Details": {
"Username" : "Anonymous",
"Story" : "Rabbit Story"
},
"Characters": [
{
"Name": "Rabbit",
"Position": "Right",
"Social" : 0.3,
"Emotion": "Happy"
},
{
"Name": "Turtle",
"Position": "Left",
"Social" : 0.2,
"Emotion": "Sad"
}
]
}
"""
In [6]:
import json
string = json.loads(s)
username = string['Details']['Username']
story = string['Details']['Story']
num_char = len(string['Characters'])
matrices, closeness_vectors = initialize(num_char)
#Initialize DB
character_id = 0
for elem in string['Characters']:
#DB[Character objs] puts the following
char_id = character_id
name = elem['Name']
position = elem['Position']
socialbility = elem['Social']
emotion = translate_to_num(elem['Emotion'])
personality = matrices[character_id]
impact = matrices[character_id + num_char]
c_vector = closeness_vectors[character_id]
print char_id
print name
print position
print socialbility
print emotion
print personality
print impact
print c_vector
print
character_id += 1
return generate_response(username,story,0,0)
In [ ]:
In [2]:
#Update Text Request
#update text in db
#send response back
s = {
"Details": {
"Story": "Rabbit Story",
"Username": "Anonymous",
"Frame_start": 1,
"Frame_end": 1
},
"Frames": [
{
"Characters":[
{
"Name": "Rabbit",
"Text": "Hello Turtle1"
},
{
"Name": "Turtle",
"Text": "Hello Rabbit1"
}
]
},
{
"Characters":[
{
"Name": "Rabbit",
"Text": "Hello Turtle2"
},
{
"Name": "Turtle",
"Text": "Hello Rabbit2"
}
]
}
]
}
In [ ]:
import json
string = json.loads(s)
username = string['Details']['Username']
story = string['Details']['Story']
start = string['Details']['Frame_start']
end = string['Details']['Frame_end']
#get number of the last frame from db
if last_known_frame < int(end):
#return malformed JSON
else:
#return JSON wanted
for elem in string['Frames']:
for sub_elem in elem['Characters']:
char_name = sub_elem['Name']
text = sub_elem['Text']
#puts in db[story][start][char_name][TEXT ENTRY] = text
start += 1
if start > end:
break
return generate_response(username,story,start,end)
In [ ]:
In [ ]:
#continue past Story
#Check for continuing or querying
#continuing
#Samples the markov chain for each character in the frame and then updates the db
#then send the response back
#querying
#query db and send info w/ text back
s = {
"Details": {
"Story": "Rabbit Story",
"Username": "Anonymous",
"Frame_start": 1,
"Frame_end": 3
}
}
In [1]:
import json
string = json.loads(s)
username = string['Details']['Username']
story = string['Details']['Story']
start = string['Details']['Frame_start']
end = string['Details']['Frame_end']
#run a for
#check if frame is in db
#continue
#else:
#pull num of characters in story something like db.story.characterobjs
#for 2 characters chosen at random:
#sample markov chain for one and update in db
#return generate_response(username, story, start, end)
In [7]:
import numpy as np
import json
total_influence = np.matrix([[0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0]])
s = json.dumps(total_influence.tolist())
print total_influence
In [6]:
print np.matrix(json.loads(s))
In [ ]: