1  from teamwork.math.ProbabilityTree import * 
  2  from teamwork.math.KeyedMatrix import * 
  3  from teamwork.dynamics.pwlDynamics import * 
  4  from teamwork.dynamics.arbitraryDynamics import * 
  5  
 
  6  
 
 15  
 
 24      
 
 25      
 
 29  
 
 31      tree0 = ProbabilityTree(IdentityMatrix(feature)) 
 32      tree1 = ProbabilityTree(IncrementMatrix(feature,keyConstant,delta)) 
 33      
 
 34      plane = KeyedPlane(IdentityRow(keys=[{'entity':'actor',
 
 35                                            'relationship':'equals'}]),0.5) 
 36  
 
 37      tree2 = createBranchTree(plane,tree0,tree1) 
 38  
 
 39      plane = KeyedPlane(IdentityRow(keys=[{'entity':'object',
 
 40                                            'relationship':'equals'}]),0.5) 
 41      
 
 42      tree3 = createBranchTree(plane,tree2,tree1) 
 43  
 
 44      return {'tree':tree3} 
  45  
 
 46  
 
 58  
 
 59  
 
 64  
 
 75  
 
 76  
 
 87  
 
 88     
 
 89  
 
 91      tree1 = ProbabilityTree(IdentityMatrix('conversation-flow-norm')) 
 92      tree4 = ProbabilityTree(IncrementMatrix('conversation-flow-norm',keyConstant,-.1)) 
 93  
 
 94   
 95  
 
 96      if not act in ['greet-init','bye-resp']: 
 97          weights = {makeStateKey('self','conversation'): 1.} 
 98          plane = KeyedPlane(KeyedVector(weights),.001) 
 99          tree2 = createBranchTree(plane,tree4,tree1) 
100      else: 
101          weights = {makeStateKey('self','conversation'): 1.} 
102          plane = KeyedPlane(KeyedVector(weights),.001) 
103          tree2 = createBranchTree(plane,tree1,tree4) 
104          
 
105  
 
106      plane = KeyedPlane(IdentityRow(keys=[{'entity':'actor',
 
107                                            'relationship':'equals'}]),0.5) 
108      tree0 = createBranchTree(plane,tree1,tree2) 
109  
 
110      return {'tree':tree0} 
 111  
 
112  
 
114      tree1 = ProbabilityTree(IdentityMatrix('init-norm')) 
115  
 
116      tree4 = ProbabilityTree(IncrementMatrix('init-norm',keyConstant,-.1)) 
117  
 
118          
 
119   
120      weights = {} 
121      for feature in [\
 
122                      'being-greeted',
 
123                      'being-byed',
 
124                      'being-enquired',
 
125                      'being-informed',
 
126                      'being-enquired-about-granny',
 
127                      ]: 
128          key = makeStateKey('self',feature) 
129          weights[key] = 1 
130          
 
131      plane = KeyedPlane(KeyedVector(weights),.001) 
132  
 
133      tree5 = createBranchTree(plane,tree1,tree4) 
134      
 
135      plane = KeyedPlane(IdentityRow(keys=[{'entity':'actor',
 
136                                            'relationship':'equals'}]),0.5) 
137      tree0 = createBranchTree(plane,tree1,tree5) 
138  
 
139      return {'tree':tree0} 
 140  
 
141  
 
143      tree0 = ProbabilityTree(IdentityMatrix('resp-norm')) 
144  
 
145      tree4 = ProbabilityTree(IncrementMatrix('resp-norm',keyConstant,-.1)) 
146      tree3 = ProbabilityTree(IdentityMatrix('resp-norm')) 
147  
 
148   
149  
 
150      if act == 'inform': 
151          varname = 'being-enquired' 
152      elif act in ['accept','reject']: 
153          varname = 'being-requested' 
154      elif act in ['OK']: 
155          varname = 'being-informed' 
156      else: 
157          varname = 'being-'+act 
158          if act[len(act)-1] == 'e': 
159              varname += 'd' 
160          else: 
161              varname += 'ed' 
162          
 
163      weights = {makeStateKey('self',varname):1.} 
164      plane = KeyedPlane(KeyedVector(weights),.001) 
165      tree2 = createBranchTree(plane,tree4,tree3) 
166  
 
167      plane = KeyedPlane(IdentityRow(keys=[{'entity':'actor',
 
168                                            'relationship':'equals'}]),0.5) 
169      tree1 = createBranchTree(plane,tree0,tree2) 
170  
 
171      return {'tree':tree1} 
 172  
 
174      tree0 = ProbabilityTree(IdentityMatrix('makeResp-norm')) 
175  
 
176      tree4 = ProbabilityTree(IdentityMatrix('makeResp-norm')) 
177      tree3 = ProbabilityTree(IncrementMatrix('makeResp-norm',keyConstant,.1)) 
178  
 
179   
180  
 
181      if act == 'inform': 
182          varname = 'being-enquired' 
183      elif act in ['accept','reject']: 
184          varname = 'being-requested' 
185      elif act in ['OK']: 
186          varname = 'being-informed' 
187      else: 
188          varname = 'being-'+act 
189          if act[len(act)-1] == 'e': 
190              varname += 'd' 
191          else: 
192              varname += 'ed' 
193          
 
194      weights = {makeStateKey('self',varname):1.} 
195      plane = KeyedPlane(KeyedVector(weights),.001) 
196      tree2 = createBranchTree(plane,tree4,tree3) 
197  
 
198      plane = KeyedPlane(IdentityRow(keys=[{'entity':'actor',
 
199                                            'relationship':'equals'}]),0.5) 
200      tree1 = createBranchTree(plane,tree0,tree2) 
201  
 
202      
 
203      return {'tree':tree1} 
 204  
 
205  
 
207  
 
208      if act == 'enquiry': 
209          varname = 'being-enquired' 
210      elif act == 'inform-info': 
211          varname = 'being-informed' 
212      else: 
213          varname = 'being-'+act 
214          if act[len(act)-1] == 'e': 
215              varname += 'd' 
216          else: 
217              varname += 'ed' 
218      tree0 = ProbabilityTree(IdentityMatrix(varname)) 
219      tree3 = ProbabilityTree(SetToConstantMatrix(feature=varname,value=1)) 
220      
 
221      plane = KeyedPlane(IdentityRow(keys=[{'entity':'object',
 
222                                            'relationship':'equals'}]),0.5) 
223  
 
224      tree1 = createBranchTree(plane,tree0,tree3) 
225  
 
226      return {'tree':tree1} 
 227  
 
228  
 
230  
 
231      if act == 'inform': 
232          varname = 'being-enquired' 
233      elif act in ['accept','reject']: 
234          varname = 'being-requested' 
235      elif act in ['OK']: 
236          varname = 'being-informed' 
237      else: 
238          varname = 'being-'+act 
239          if act[len(act)-1] == 'e': 
240              varname += 'd' 
241          else: 
242              varname += 'ed' 
243      tree0 = ProbabilityTree(IdentityMatrix(varname)) 
244      tree3 = ProbabilityTree(IncrementMatrix(varname,keyConstant,-1)) 
245  
 
246      weights = {makeStateKey('self',varname):1.} 
247      plane = KeyedPlane(KeyedVector(weights),.1) 
248      tree2 = createBranchTree(plane,tree0,tree3) 
249      
 
250      plane = KeyedPlane(IdentityRow(keys=[{'entity':'actor',
 
251                                            'relationship':'equals'}]),0.5) 
252      
 
253      tree1 = createBranchTree(plane,tree0,tree2) 
254      return {'tree':tree1} 
 255  
 
257      tree0 = ProbabilityTree(IdentityMatrix('conversation')) 
258      if intend == 'greet': 
259          tree1 = ProbabilityTree(SetToConstantMatrix(feature='conversation',value=1)) 
260      elif intend == 'bye': 
261          tree1 = ProbabilityTree(SetToConstantMatrix(feature='conversation',value=0)) 
262          
 
263      plane = KeyedPlane(IdentityRow(keys=[{'entity':'actor',
 
264                                            'relationship':'equals'}]),0.5) 
265      
 
266      tree2 = createBranchTree(plane,tree0,tree1) 
267  
 
268      plane = KeyedPlane(IdentityRow(keys=[{'entity':'object',
 
269                                            'relationship':'equals'}]),0.5) 
270      
 
271      tree3 = createBranchTree(plane,tree2,tree1) 
272      
 
273      return {'tree':tree3} 
 274  
 
275  
 
277  
 
278      tree0 = ProbabilityTree(IdentityMatrix('noRepeat-norm')) 
279      tree1 = ProbabilityTree(IncrementMatrix('noRepeat-norm',keyConstant,-.1)) 
280      
 
281      
 
282      weights = {makeStateKey('actor',feature):1.} 
283      plane = KeyedPlane(KeyedVector(weights),0) 
284      tree3 = createBranchTree(plane,tree0,tree1) 
285      
 
286      plane = KeyedPlane(IdentityRow(keys=[{'entity':'actor',
 
287                                            'relationship':'equals'}]),0.5) 
288      
 
289      tree4 = createBranchTree(plane,tree0,tree3) 
290      return {'tree':tree4} 
 291  
 
292  
 
293  
 
294  
 
296      tree0 = ProbabilityTree(IdentityMatrix(feature)) 
297      tree1 = ProbabilityTree(IncrementMatrix(feature,keyConstant,.05)) 
298      
 
299      name = feature.strip('SDwith') 
300      if name == 'Wolf': 
301          name = 'wolf' 
302      
 
303      plane = KeyedPlane(ClassRow(keys=[{'entity':'object','value':name}]),0) 
304  
 
305      tree3 = createBranchTree(plane,tree0,tree1) 
306  
 
307      plane = KeyedPlane(ClassRow(keys=[{'entity':'actor','value':name}]),0) 
308  
 
309      tree2 = createBranchTree(plane,tree0,tree1) 
310  
 
311      plane = KeyedPlane(IdentityRow(keys=[{'entity':'object',
 
312                                            'relationship':'equals'}]),0.5) 
313  
 
314      tree5 = createBranchTree(plane,tree0,tree2) 
315      
 
316      plane = KeyedPlane(IdentityRow(keys=[{'entity':'actor',
 
317                                            'relationship':'equals'}]),0.5) 
318      
 
319      tree4 = createBranchTree(plane,tree5,tree3) 
320      return {'tree':tree4} 
 321  
 
322      
 
324      tree0 = ProbabilityTree(IdentityMatrix('SDnorm')) 
325      tree1 = ProbabilityTree(IncrementMatrix('SDnorm',keyConstant,-.1)) 
326      
 
327      
 
328      weights = {makeStateKey('object','SDwithWolf'):1.} 
329      plane = KeyedPlane(KeyedVector(weights),0) 
330      tree3 = createBranchTree(plane,tree1,tree0) 
331      
 
332      plane = KeyedPlane(IdentityRow(keys=[{'entity':'actor',
 
333                                            'relationship':'equals'}]),0.5) 
334      
 
335      tree4 = createBranchTree(plane,tree0,tree3) 
336      return {'tree':tree4} 
 337      
 
338  
 
350  
 
351  DynFun = {
 
352      'noneDyn': {},
 
353      'basicDyn': {
 
354          'resp-norm':{\
 
355                       'greet-resp':{'class':PWLDynamics,
 
356                                    'args':RespNorm('greet')},
 
357                       
 
358                       'bye-resp':{'class':PWLDynamics,
 
359                                  'args':RespNorm('bye')},
 
360                      
 
361                       'inform':{'class':PWLDynamics,
 
362                                  'args':RespNorm('inform')},
 
363                      
 
364                                  },
 
365          'makeResp-norm':{\
 
366                       'greet-resp':{'class':PWLDynamics,
 
367                                    'args':MakeRespNorm('greet')},
 
368                       
 
369                       'bye-resp':{'class':PWLDynamics,
 
370                                  'args':MakeRespNorm('bye')},
 
371                      
 
372                       'inform':{'class':PWLDynamics,
 
373                                  'args':MakeRespNorm('inform')},
 
374                      
 
375                  
 
376                                  },
 
377          'init-norm':{'greet-init':{'class':PWLDynamics,
 
378                                  'args':InitNorm()}, 
 
379                      
 
380                       'bye-init':{'class':PWLDynamics,
 
381                                      'args':InitNorm()}, 
 
382                      
 
383                      'enquiry':{'class':PWLDynamics,
 
384                                      'args':InitNorm()}, 
 
385                      
 
386                       'wait':{'class':PWLDynamics,
 
387                                      'args':InitNorm()}, 
 
388                      
 
389                                      },
 
390  
 
391          'conversation-flow-norm':{'greet-init':{'class':PWLDynamics,
 
392                                          'args':conversationFlowNorm('greet-init')}, 
 
393                                    'greet-resp':{'class':PWLDynamics,
 
394                                          'args':conversationFlowNorm('greet')},
 
395                                    'bye-init':{'class':PWLDynamics,
 
396                                          'args':conversationFlowNorm('bye-init')}, 
 
397                                    'bye-resp':{'class':PWLDynamics,
 
398                                          'args':conversationFlowNorm('bye-resp')},
 
399                                    'enquiry':{'class':PWLDynamics,
 
400                                          'args':conversationFlowNorm('enquiry')}, 
 
401                                    'inform':{'class':PWLDynamics,
 
402                                          'args':conversationFlowNorm('inform')},
 
403                                    'inform-info':{'class':PWLDynamics,
 
404                                          'args':conversationFlowNorm('inform-info')},
 
405                                    'OK':{'class':PWLDynamics,
 
406                                           'args':conversationFlowNorm('OK')},
 
407   
 
408                                  },
 
409  
 
410          'noRepeat-norm':{\
 
411  
 
412  
 
413                          'greet-init':{'class':PWLDynamics,
 
414                           'args':noRepeatDyn('greeted')},
 
415                          'bye-init':{'class':PWLDynamics,
 
416                           'args':noRepeatDyn('byed')},
 
417                  },
 
418  
 
419          
 
420  
 
421          'greeted':{'greet-init':{'class':PWLDynamics,
 
422                              'args':deltaActorOrObjectDyn('greeted', 1)},
 
423                   'greet-resp':{'class':PWLDynamics,
 
424                              'args':deltaActorOrObjectDyn('greeted', 1)},
 
425                     'bye-init':{'class':PWLDynamics,
 
426                              'args':deltaActorOrObjectDyn('greeted', 1)},
 
427                   'bye-resp':{'class':PWLDynamics,
 
428                              'args':deltaActorOrObjectDyn('greeted', 1)},
 
429                     'enquiry':{'class':PWLDynamics,
 
430                              'args':deltaActorOrObjectDyn('greeted', 1)},
 
431                   'inform':{'class':PWLDynamics,
 
432                              'args':deltaActorOrObjectDyn('greeted', 1)},
 
433  
 
434                          },
 
435  
 
436          'byed':{'bye-init':{'class':PWLDynamics,
 
437                              'args':deltaActorOrObjectDyn('byed', 1)},
 
438                   'bye-resp':{'class':PWLDynamics,
 
439                              'args':deltaActorOrObjectDyn('byed', 1)},
 
440                          },
 
441  
 
442          'enquired':{'enquiry':{'class':PWLDynamics,
 
443                              'args':deltaActorDyn('enquired', 1)},
 
444                          },
 
445  
 
446          'being-greeted':{'greet-init':{'class':PWLDynamics,
 
447                              'args':IntendImposeNorm('greet')},
 
448                          'greet-resp':{'class':PWLDynamics,
 
449                              'args':IntendFinishNorm('greet')},
 
450                          },
 
451          'being-byed':{'bye-init':{'class':PWLDynamics,
 
452                              'args':IntendImposeNorm('bye')},
 
453                          'bye-resp':{'class':PWLDynamics,
 
454                              'args':IntendFinishNorm('bye')},
 
455                          },
 
456          
 
457          'being-enquired':{'enquiry':{'class':PWLDynamics,
 
458                              'args':IntendImposeNorm('enquiry')},
 
459                          'inform':{'class':PWLDynamics,
 
460                              'args':IntendFinishNorm('inform')},
 
461                          },
 
462          'being-informed':{'inform-info':{'class':PWLDynamics,
 
463                              'args':IntendImposeNorm('inform-info')},
 
464                          'OK':{'class':PWLDynamics,
 
465                              'args':IntendFinishNorm('OK')},
 
466                          },
 
467                  
 
468          'conversation':{\
 
469      
 
470                          'wait':{'class':PWLDynamics,
 
471                              'args':dummyDyn('conversation')},
 
472                          'bye-resp':{'class':PWLDynamics,
 
473                              'args':dummyDyn('conversation')},
 
474  
 
475                          None:{'class':PWLDynamics,
 
476                                  'args':conversationDyn('greet')},
 
477                          'bye-init':{'class':PWLDynamics,
 
478                                  'args':conversationDyn('bye')},
 
479                          },
 
480          
 
481          'likeTalk':{\
 
482                          None:{'class':PWLDynamics,
 
483                                  'args':likeActDyn('likeTalk')},
 
484                          'wait':{'class':PWLDynamics,
 
485                              'args':dummyDyn('likeTalk')},
 
486                  },
 
487                             
 
488                          },
 
489   
 
490          } 
491