Biogeme: Python Library  4.6a
bio_expression.py
Go to the documentation of this file.
1 
5 
6 #import hashlib #remove if not needed
7 #import random #remove if not needed
8 import string
9 
10 class Operator:
11 
12  num = 'numeric'
13  var = 'variable'
14  userexpr = 'UserExpression'
15  userdraws = 'UserDraws'
16  rv = 'randomVariable'
17  param = 'beta'
18  mcdraws = 'MCDraw'
19  mcunifdraws = 'MCUnifDraw'
20  normal = 'N(0,1)'
21  uniform = 'U[0,1]'
22  uniformSym = 'U[-1,1]'
23  absOp, negOp = 'abs','minus'
24  exp, log = 'exp','log'
25  bioNormalCdf = 'bioNormalCdf'
26  add, sub, mul, div, power = '+', '-', '*', '/', '**'
27  andOp, orOp, equal, notEqual = 'and','or','==','<>'
28  greater, greaterEq, less, lessEq = '>','>=','<','<='
29  minOp, maxOp, mod = 'min','max','mod'
30  sumOp, prodOp, integralOp, derivativeOp = 'sum', 'prod','integral','derivative'
31  monteCarloOp = 'MonteCarlo'
32  monteCarloCVOp = 'MonteCarloControlVariate'
33  elemOp, enumOp, logitOp, loglogitOp, multSumOp, multProdOp, bioNormalPdf = 'elem', 'enumerate','logit','loglogit','multSum','multProd','bioNormalPdf'
34  mhOp = 'MH'
35  bayesMeanOp = 'bioBayesNormalDraw'
36  defineOp = 'define'
37 
38  # Bounds
39  MIN_ZEROOP_INDEX = 0
40  MAX_ZEROOP_INDEX = 19
41  MIN_UNOP_INDEX = 20
42  MAX_UNOP_INDEX = 39
43  MIN_BINOP_INDEX = 40
44  MAX_BINOP_INDEX = 69
45  MIN_ITERATOROP_INDEX = 70
46  MAX_ITERATOROP_INDEX = 89
47 
48  UNDEF_OP = -1
49 
50  # Each operator is associated with an index depending on
51  # the above bounds
52  operatorIndexDic = {num:0, \
53  var:1, \
54  param:2, \
55  normal:3, \
56  uniform:4, \
57  rv:5, \
58  uniformSym:6, \
59  userexpr:7, \
60  mcdraws:8, \
61  mcunifdraws:9, \
62  userdraws:10, \
63  absOp:20, negOp:21, \
64  exp:30, log:31, bioNormalCdf: 33, monteCarloOp: 34,\
65  add:40, sub:41, mul:42, div:43, power:44, \
66  andOp:45, orOp:46, equal:47, notEqual:48, \
67  greater:49, greaterEq:50, less:51, lessEq:52, \
68  minOp:53, maxOp:54, mod:55, \
69  sumOp:70, prodOp:71, \
70  elemOp:90, enumOp:91, integralOp:92, derivativeOp:93, \
71  defineOp:94, logitOp:95, bioNormalPdf:96, multSumOp:97, multProdOp:98, mhOp:99, bayesMeanOp:100,monteCarloCVOp: 101,loglogitOp:102 }
72 
73  # Return the index associated to an operator
74  def getOpIndex(self,op):
75  return Operator.operatorIndexDic[op];
76 
77 
78 Operator = Operator()
79 
80 
81 
83 def buildExpressionObj(exp):
84 
85  def isNumeric(obj):
86  # Consider only ints and floats numeric
87  return isinstance(obj,int) or isinstance(obj,float)
88 
89  if isNumeric(exp) :
90  return Numeric(exp)
91  else :
92  return exp
93 
94 
95 class Expression:
96 
97  def __init__(self):
98  self.operatorIndex = UNDEF_OP
99 
100 
101 
102  def getExpression(self):
103  raise NotImplementedError("getExpression must be implemented! ")
104 
105 
106  def getID(self):
107  return str(self.operatorIndex) + "-no ID"
108 
109 
110  def __str__(self):
111  return self.getExpression()
112 
113 
115 
116  def __neg__(self):
117  return UnOp(Operator.negOp, self)
118 
119 
122  def __add__(self, expression):
123  return BinOp(Operator.add, self, buildExpressionObj(expression))
124 
125 
128  def __radd__(self, expression):
129  return BinOp(Operator.add, buildExpressionObj(expression), self)
130 
131 
134  def __sub__(self, expression):
135  return BinOp(Operator.sub, self, buildExpressionObj(expression))
136 
137 
140  def __rsub__(self, expression):
141  return BinOp(Operator.sub, buildExpressionObj(expression), self)
142 
143 
146  def __mul__(self, expression):
147  return BinOp(Operator.mul, self, buildExpressionObj(expression))
148 
149 
152  def __rmul__(self, expression):
153  return BinOp(Operator.mul, buildExpressionObj(expression), self)
154 
155 
158  def __div__(self, expression):
159  return BinOp(Operator.div, self, buildExpressionObj(expression))
160 
161 
164  def __rdiv__(self, expression):
165  return BinOp(Operator.div, buildExpressionObj(expression), self)
166 
167 
171  def __truediv__(self, expression):
172  return BinOp(Operator.div, self, buildExpressionObj(expression))
173 
174 
178  def __rtruediv__(self, expression):
179  return BinOp(Operator.div, buildExpressionObj(expression), self)
180 
181 
184  def __mod__(self, expression):
185  return BinOp(Operator.modOp, self, buildExpressionObj(expression))
186 
187 
190  def __pow__(self, expression):
191  return BinOp(Operator.power, self, buildExpressionObj(expression))
192 
193 
196  def __rpow__(self, expression):
197  return BinOp(Operator.power, buildExpressionObj(expression), self)
198 
199 
202  def __and__(self, expression):
203  return BinOp(Operator.andOp, self, buildExpressionObj(expression))
204 
205 
208  def __or__(self, expression):
209  return BinOp(Operator.orOp, self, buildExpressionObj(expression))
210 
211 
214  def __eq__(self, expression):
215  return BinOp(Operator.equal, self, buildExpressionObj(expression))
216 
217 
220  def __ne__(self, expression):
221  return BinOp(Operator.notEqual, self, buildExpressionObj(expression))
222 
223 
226  def __le__(self, expression):
227  return BinOp(Operator.lessEq, self, buildExpressionObj(expression))
228 
229 
232  def __ge__(self, expression):
233  return BinOp(Operator.greaterEq, self, buildExpressionObj(expression))
234 
235 
238  def __lt__(self, expression):
239  return BinOp(Operator.less, self, buildExpressionObj(expression))
240 
241 
244  def __gt__(self, expression):
245  return BinOp(Operator.greater, self, buildExpressionObj(expression))
246 
247 
248 
250 
252  def __init__(self,number):
253  self.number = number
254  self.operatorIndex = Operator.operatorIndexDic[Operator.num]
255 
256  def getExpression(self):
257  return "(" + str(self.number) + ")"
258 
259  def getID(self):
260  return str(self.operatorIndex)+"-"+str(self.number)
261 
262 
272 
273  def __init__(self,name):
274  self.name = name
275  self.operatorIndex = Operator.operatorIndexDic[Operator.var]
276 
277  def getExpression(self):
278  return str(self.name)
279 
280  def getID(self):
281  return str(self.operatorIndex)+"-"+str(self.name)
282 
283 
294 
295  def __init__(self,name):
296  self.name = name
297  self.operatorIndex = Operator.operatorIndexDic[Operator.rv]
298 
299  def getExpression(self):
300  return str(self.name)
301 
302 
318 
320  def __init__(self,name,expression):
321  self.name = name
322  self.expression = buildExpressionObj(expression)
323  self.operatorIndex = Operator.operatorIndexDic[Operator.userexpr]
324 
325  def getExpression(self):
326  return self.name + self.expression.getExpression()
327 
328 
334 
336  def __init__(self,name,expression, iteratorName):
337  self.name = name
338  self.expression = buildExpressionObj(expression)
339  self.iteratorName = iteratorName
340  self.operatorIndex = Operator.operatorIndexDic[Operator.userdraws]
341 
342  def getExpression(self):
343  return self.name + self.expression.getExpression()
344 
345  def getID(self):
346  return str(self.operatorIndex) + "-" + self.getExpression()
347 
348 
349 
360 
366  def __init__(self,name,value,lowerbound,upperbound,status,desc=''):
367  self.name = name
368  self.val = value
369  self.lb = lowerbound
370  self.ub = upperbound
371  self.st = status
372  self.desc = desc
373  self.operatorIndex = Operator.operatorIndexDic[Operator.param]
374 
375  def getExpression(self):
376  #return str(self.name)
377  return self.name + " " + str(self.val) + " " + str(self.lb) + \
378  " " + str(self.ub) + " " + str(self.st) + " " + self.desc
379 
380  def getID(self):
381  return str(self.operatorIndex) + "-" + self.getExpression()
382 
383 
384 
385 
386 
390 
391 
392  def __init__(self,name):
393  print("**** DRAWS", name," ",Operator.mcdraws)
394  self.name = name
395  self.operatorIndex = Operator.operatorIndexDic[Operator.mcdraws]
396 
397  def getExpression(self):
398  return str(self.name)
399 
400  def getID(self):
401  return str(self.operatorIndex)+"-Draw"+self.getExpression()
402 
403 
404 
405 
406 
409 
410 
411  def __init__(self,name):
412  print("**** RECYCLED DRAWS", name," ",Operator.mcunifdraws)
413  self.name = name
414  self.operatorIndex = Operator.operatorIndexDic[Operator.mcunifdraws]
415  print("Id: ", self.getID())
416 
417  def getExpression(self):
418  return "Unif("+str(self.name)+")"
419 
420  def getID(self):
421  return str(self.operatorIndex)+"-Unif"+self.getExpression()
422 
423 
424 
439 
440 
443  def __init__(self,name,index='__rowId__'):
444  msg = 'Deprecated syntax: bioNormalDraws(\''+name+'\'). Use bioDraws(\''+name+'\') and BIOGEME_OBJECT.DRAWS = { \''+name+'\': \'NORMAL\' }'
445 
446  raise SyntaxError(msg)
447 
448 
449 
464 
465 
468  def __init__(self,name,index='__rowId__'):
469  msg = 'Deprecated syntax: bioUniformSymmetricDraws(\''+name+'\'). Use bioDraws(\''+name+'\') and BIOGEME_OBJECT.DRAWS = { \''+name+'\': \'UNIFORMSYM\' }'
470 
471  raise SyntaxError(msg)
472 
473 
474 
489 
490 
493  def __init__(self,name,index='__rowId__'):
494  msg = 'Deprecated syntax: bioUniformDraws(\''+name+'\'). Use bioDraws(\''+name+'\') and BIOGEME_OBJECT.DRAWS = { \''+name+'\': \'UNIFORM\' }'
495 
496  raise SyntaxError(msg)
497 
499 
501  def __init__(self,op,expression):
502  self.op = op
503  self.expression = buildExpressionObj(expression)
504  self.operatorIndex = Operator.operatorIndexDic[op]
505 
506  def getExpression(self):
507  return self.op + "(" + self.expression.getExpression() + ")"
508 
509 
510 
511 
520 
521  def __init__(self,expression):
522  self.expression = buildExpressionObj(expression)
523  self.operatorIndex = Operator.operatorIndexDic[Operator.absOp]
524 
525  def getExpression(self):
526  return Operator.absOp + "(" + self.expression.getExpression() + ")"
527 
528 
529 
537 
538  def __init__(self,expression):
539  self.expression = buildExpressionObj(expression)
540  self.operatorIndex = Operator.operatorIndexDic[Operator.exp]
541 
542  def getExpression(self):
543  return Operator.exp + "(" + self.expression.getExpression() + ")"
544 
545  def getID(self):
546  return str(self.operatorIndex) + "-" + self.getExpression()
547 
548 
549 
553 
554  def __init__(self,expression):
555  self.expression = buildExpressionObj(expression)
556  self.operatorIndex = Operator.operatorIndexDic[Operator.log]
557 
558  def getExpression(self):
559  return Operator.log + "(" + self.expression.getExpression() + ")"
560 
561  def getID(self):
562  return str(self.operatorIndex) + "-" + self.getExpression()
563 
564 
576 
577  def __init__(self,expression):
578  self.expression = buildExpressionObj(expression)
579  self.operatorIndex = Operator.operatorIndexDic[Operator.bioNormalCdf]
580 
581  def getExpression(self):
582  return Operator.normalCdf + "(" + self.expression.getExpression() + ")"
583 
584 
590 
592  def __init__(self,left,right):
593  self.left = buildExpressionObj(left)
594  self.right = buildExpressionObj(right)
595  self.operatorIndex = Operator.operatorIndexDic[Operator.maxOp]
596 
597  def getExpression(self):
598  return "max(" + self.left.getExpression() + "," + self.right.getExpression() + ")"
599 
600 
607  def __init__(self,left,right):
608  self.left = buildExpressionObj(left)
609  self.right = buildExpressionObj(right)
610  self.operatorIndex = Operator.operatorIndexDic[Operator.minOp]
611 
612  def getExpression(self):
613  return "min(" + self.left.getExpression() + "," + self.right.getExpression() + ")"
614 
615 
617 
620  def __init__(self,op,left,right):
621  self.op = op
622  self.left = buildExpressionObj(left)
623  self.right = buildExpressionObj(right)
624  self.operatorIndex = Operator.operatorIndexDic[op]
625 
626  def getExpression(self):
627  return "(" + self.left.getExpression() + self.op + self.right.getExpression() + ")"
628 
629  def getID(self):
630  return str(self.operatorIndex) + "-" + self.getExpression()
631 
632 
635 
636  def __init__(self, expression) :
637  self.expression = buildExpressionObj(expression)
638  self.operatorIndex = Operator.operatorIndexDic[Operator.monteCarloOp]
639 
640  def getExpression(self) :
641  strexpr = "MonteCarlo"
642  strexpr += "(" + self.expression.getExpression() + ")"
643  return strexpr
644 
645 
651 
652  def __init__(self, expression, integrand,integral) :
653  self.expression = buildExpressionObj(expression)
654  self.integrand = buildExpressionObj(integrand)
655  self.integral = buildExpressionObj(integral)
656  self.operatorIndex = Operator.operatorIndexDic[Operator.monteCarloCVOp]
657 
658  def getExpression(self) :
659  strexpr = "MonteCarloControlVariate"
660  strexpr += "(" + self.function.getExpression() + ")"
661  return strexpr
662 
663 
676 class Sum(Expression) :
677 
679  def __init__(self, term, iteratorName) :
680  self.function = buildExpressionObj(term)
681  self.iteratorName = iteratorName
682  self.operatorIndex = Operator.operatorIndexDic[Operator.sumOp]
683 
684  def getExpression(self) :
685  strexpr = "sum"
686  strexpr += "[" + str(self.iteratorName) + "]"
687  strexpr += "(" + self.function.getExpression() + ")"
688  return strexpr
689 
690 
691 
692 
693 
694 
733 class Prod(Expression) :
734 
739  def __init__(self, term, iteratorName,positive=False) :
740  self.function = buildExpressionObj(term)
741  self.iteratorName = iteratorName
742  self.positive = positive
743  self.operatorIndex = Operator.operatorIndexDic[Operator.prodOp]
744 
745  def getExpression(self) :
746  strexpr = "prod"
747  strexpr += "[" + str(self.iteratorName) + "]"
748  strexpr += "(" + self.function.getExpression() + ")"
749  return strexpr
750 
751 
784 
786  def __init__(self, term,v):
787  self.function = buildExpressionObj(term)
788  self.variable = v
789  self.operatorIndex = Operator.operatorIndexDic[Operator.integralOp]
790 
791  def getExpression(self) :
792  strexpr = "Integral"
793  strexpr += "(" + self.function.getExpression() + "," + variable + ")"
794  return strexpr
795 
796 
815 
817  def __init__(self, term,v):
818  self.function = buildExpressionObj(term)
819  self.variable = v
820  self.operatorIndex = Operator.operatorIndexDic[Operator.derivativeOp]
821 
822  def getExpression(self) :
823  strexpr = "Derive"
824  strexpr += "(" + self.function.getExpression() + "," + variable + ")"
825  return strexpr
826 
827 
841 
842  def __init__(self, term):
843  self.function = buildExpressionObj(term)
844  self.operatorIndex = Operator.operatorIndexDic[Operator.bioNormalPdf]
845 
846  def getExpression(self) :
847  strexpr = "normalPdf"
848  strexpr += "(" + self.function.getExpression() + ")"
849  return strexpr
850 
851 
871 class Elem(Expression) :
872 
880  def __init__(self, dictionary, key, default = Numeric(0)) :
881  self.prob = {} # dictionary
882  for k,v in dictionary.items() :
883  self.prob[k] = buildExpressionObj(v)
884 
885  self.choice = buildExpressionObj(key)
886  self.default = buildExpressionObj(default)
887  self.operatorIndex = Operator.operatorIndexDic[Operator.elemOp]
888 
889  def getExpression(self) :
890  res = "Elem"
891  res += "[" + str(self.choice) + "]"
892  res += "{"
893  for i,v in self.prob.items():
894  res += "(" + str(i) + ": " + str(v) + ")"
895  res += "}"
896  return res
897 
898  def getID(self):
899  return str(self.operatorIndex) + "-" + self.getExpression()
900 
901 
902 
915 
928  def __init__(self, util, av, choice) :
929  self.prob = {} # dictionary
930  for k,v in util.items() :
931  self.prob[k] = buildExpressionObj(v)
932  self.av = {}
933  for k,v in av.items() :
934  self.av[k] = buildExpressionObj(v)
935  self.choice = buildExpressionObj(choice)
936  self.operatorIndex = Operator.operatorIndexDic[Operator.logitOp]
937 
938  def getExpression(self) :
939  res = "Logit"
940  res += "[" + str(self.choice) + "]"
941  res += "{"
942  for i,v in self.prob.items():
943  res += "(" + str(i) + ": " + str(v) + ")"
944  res += "}"
945  res += "{"
946  for i,v in self.av.items():
947  res += "(" + str(i) + ": " + str(v) + ")"
948  res += "}"
949  return res
950 
951 
964 
977  def __init__(self, util, av, choice) :
978  self.prob = {} # dictionary
979  for k,v in util.items() :
980  self.prob[k] = buildExpressionObj(v)
981  self.av = {}
982  for k,v in av.items() :
983  self.av[k] = buildExpressionObj(v)
984 
985  self.choice = buildExpressionObj(choice)
986  self.operatorIndex = Operator.operatorIndexDic[Operator.loglogitOp]
987 
988  def getExpression(self) :
989  res = "LogLogit"
990  res += "[" + str(self.choice) + "]"
991  res += "{"
992  for i,v in self.prob.items():
993  res += "(" + str(i) + ": " + str(v) + ")"
994  res += "}"
995  res += "{"
996  for i,v in self.av.items():
997  res += "(" + str(i) + ": " + str(v) + ")"
998  res += "}"
999  return res
1000 
1001 
1002 
1003 
1012 
1013  def __init__(self, terms) :
1014  if type(terms).__name__ == 'list':
1015  self.type = 1
1016  self.terms = [] ;
1017  for k in terms :
1018  self.terms.append(buildExpressionObj(k))
1019  elif type(terms).__name__ == 'dict':
1020  self.type = 2
1021  self.terms = {} ;
1022  for k,v in terms.items() :
1023  self.terms[k] = buildExpressionObj(v)
1024  else:
1025  self.type = -1
1026  self.operatorIndex = Operator.operatorIndexDic[Operator.multSumOp]
1027 
1028  def getExpression(self) :
1029  res = "bioMultSum"
1030  res += "("
1031  if self.type == 2:
1032  for i,v in self.terms.items():
1033  res += v.getExpression() + ","
1034 
1035  if self.type ==1:
1036  for k in self.terms:
1037  res += k.getExpression() + ","
1038 
1039  #remove last coma
1040  res = res[:-1] + ")"
1041  return res
1042 
1043  def getID(self):
1044  return str(self.operatorIndex)+"-"+self.getExpression()
1045 
1046 
1047 
1064 
1066 
1073  def __init__(self, term, iteratorName) :
1074  self.theDict = {}
1075  for k,v in term.items():
1076  self.theDict[k] = buildExpressionObj(v)
1077  self.iteratorName = iteratorName
1078  self.operatorIndex = Operator.operatorIndexDic[Operator.enumOp]
1079 
1080  def getExpression(self) :
1081  strexpr = "Enumerate"
1082  strexpr += "[" + str(self.iteratorName) + "]"
1083  strexpr += "{"
1084  for i,v in self.term.items():
1085  strexpr += "(" + str(i) + ": " + str(v) + ")"
1086  strexpr += "}"
1087  return strexpr
1088 
1089 
1096  def __init__(self, mean, realizations, varcovar):
1097  self.error = None
1098  if type(mean).__name__ == 'list':
1099  self.mean = [] ;
1100  for k in mean :
1101  self.mean.append(buildExpressionObj(k))
1102  else:
1103  self.error = "Syntax error: the first argument of bioBayesNormalDraw must be a list of expressions. Syntax: [B_TIME, B_COST]. " ;
1104 
1105  if type(realizations).__name__ == 'list':
1106  self.realizations = [] ;
1107  for k in realizations :
1108  self.realizations.append(buildExpressionObj(k))
1109  else:
1110  self.error = "Syntax error: the second argument of bioBayesNormalDraw must be a list of expressions. Syntax: [B_TIME_RND, B_COST_RND]"
1111  if type(varcovar).__name__ == 'list':
1112  self.varcovar = [] ;
1113  for k in varcovar :
1114  row = []
1115  if type(k).__name__ == 'list':
1116  for j in k:
1117  row.append(buildExpressionObj(k))
1118  self.varcovar.append(row)
1119  else:
1120  self.error = "Syntax error: the third argument of bioBayesNormalDraw must be a list of list of expressions. Syntax: [[ B_TIME_S , B_COVAR ] , [B_COVAR , B_COST_S]]." ;
1121 
1122 
1123  else:
1124  self.error = "Syntax error: the third argument of bioBayesNormalDraw must be a list of list of expressions. Syntax: [[ B_TIME_S , B_COVAR ] , [B_COVAR , B_COST_S]]."
1125  self.varcovar = varcovar
1126  self.operatorIndex = Operator.operatorIndexDic[Operator.bayesMeanOp]
1127 
1128 
1139 class MH(Expression) :
1140 
1146 
1147 
1150  def __init__(self, beta, density, warmup, steps) :
1151  if type(beta).__name__ == 'list':
1152  self.type = 1
1153  self.beta = [] ;
1154  for k in beta :
1155  self.beta.append(buildExpressionObj(k))
1156  elif type(beta).__name__ == 'dict':
1157  self.type = 2
1158  self.beta = {} ;
1159  for k,v in beta.items() :
1160  self.beta[k] = buildExpressionObj(v)
1161  else:
1162  self.type = -1
1163  self.density = density
1164  self.warmup = warmup
1165  self.steps = steps
1166  self.operatorIndex = Operator.operatorIndexDic[Operator.mhOp]
1167 
1168 
1169 #class Define(Expression) :
1170 # def __init__(self, name, expr, classname=None):
1171 # self.name = name
1172 # self.expr = expr
1173 # self.operatorIndex = Operator.operatorIndexDic[Operator.defineOp]
1174 #
1175 # def getExpression(self):
1176 # return str(self.name)
1177 #
1178 # def assign(self, expr) :
1179 # self.expr = expr
1180 
1181 
1182 
Class representing the expression for natural logarithm.
Class representing the product of the same expression applied to a list of data.
def __init__(self, beta, density, warmup, steps)
def __init__(self, op, left, right)
def __eq__(self, expression)
Class representing the definition of a new variable.
Class calculating a logit choice probability.
Class performing numerical integration relying on the Gauss-Hermite quadrature to compute ...
def __truediv__(self, expression)
Support for Python version 3.x.
Class representing the variables defined in the data file.
def __radd__(self, expression)
Class representing a normally distributed random variable for simulated integration.
def __pow__(self, expression)
Class representing the definition of a new type of draws.
def __init__(self, term, iteratorName, positive=False)
Generic class for binary operators.
def __rpow__(self, expression)
def __init__(self, expression)
def __init__(self, name, index='__rowId__')
Class generating the analytical derivative of an expression.
Class representing a uniformly distributed random variable on [0,1] for simulated integration...
Interface for mathematical expressions.
def __gt__(self, expression)
def __ge__(self, expression)
def __init__(self, name)
def __lt__(self, expression)
def __init__(self, expression)
Class computing the sum of multiple expressions.
def __rsub__(self, expression)
Class performing draws from densities for Bayesian estimation using Metropolis-Hastings algorithm...
def __init__(self, expression)
Class representing a random variable for integration using Monte Carlo simulation.
def __init__(self, term, v)
Class performing draws from the posterior of the mean of a normal variable knowing realizations and v...
Class representing the expression for the minimum of two expressions.
def __init__(self, left, right)
def __rdiv__(self, expression)
def __init__(self, expression, integrand, integral)
Class representing a parameter to be estimated.
Class wrapping an integer or a float value.
Generic class for an operator.
def __rmul__(self, expression)
Class representing the expression for the maximum of two expressions.
Class representing the cumulative distribution function of the normal distribution.
def __init__(self, term, iteratorName)
def __init__(self, term, v)
Class calculating the log of a logit choice probability.
Class representing the expression for exponential.
Class representing the expression for absolute value.
Class representing the uniform draw of a random variable used for integration using Monte Carlo simul...
def __init__(self, name, index='__rowId__')
def __init__(self, util, av, choice)
def __mod__(self, expression)
Class representing the probability density function of a standardized normally distributed random var...
def __init__(self, expression)
def __and__(self, expression)
def __init__(self, op, expression)
def __div__(self, expression)
def __rtruediv__(self, expression)
Support for Python version 3.x.
Class representing the sum of the same expression applied to a list of data.
def __init__(self, util, av, choice)
def __sub__(self, expression)
def __init__(self, name, value, lowerbound, upperbound, status, desc='')
Generic class for unary operators.
def __init__(self, dictionary, key, default=Numeric(0))
def __init__(self, expression)
def __init__(self, term, iteratorName)
def __init__(self, name, expression, iteratorName)
Class representing a random variable for numerical integration.
def __init__(self)
Constructor.
def __mul__(self, expression)
def __init__(self, name, index='__rowId__')
Class representing the Monte Carlo integration of an expression, using a control variate method to de...
def __init__(self, name)
Class performing a sample enumeration.
Class representing a uniformly distributed random variable on [-1,1] for simulated integration...
Class extracting an expression from a dictionary.
Class representing the Monte Carlo integration of an expression.
def __or__(self, expression)
def __init__(self, name, expression)
def __le__(self, expression)
def __init__(self, number)
def __add__(self, expression)
def __ne__(self, expression)
Copyright 2017 Michel Bierlaire