@@ -176,6 +176,8 @@ def variable_values(self, var):
176176 "Return the domain of var."
177177 return [True , False ]
178178
179+ def __repr__ (self ):
180+ return 'BayesNet(%r)' % self .nodes
179181
180182class BayesNode :
181183 """A conditional probability distribution for a boolean variable,
@@ -241,6 +243,9 @@ def sample(self, event):
241243 parents."""
242244 return probability (self .p (True , event ))
243245
246+ def __repr__ (self ):
247+ return 'node(%r, %r)' % (self .variable , ' ' .join (self .parents ))
248+
244249node = BayesNode
245250
246251# Burglary example [Fig. 14.2]
@@ -292,6 +297,7 @@ def elimination_ask(X, e, bn):
292297 >>> elimination_ask('Burglary', dict(JohnCalls=T, MaryCalls=T), burglary
293298 ... ).show_approx()
294299 'False: 0.716, True: 0.284'"""
300+ assert X not in e , "Query variable must be distinct from evidence"
295301 factors = []
296302 for var in reversed (bn .vars ):
297303 factors .append (make_factor (var , e , bn ))
@@ -492,19 +498,19 @@ def particle_filtering(e, N, dbn):
492498
493499#_______________________________________________________________________________
494500__doc__ += """
495- ## We can build up a probability distribution like this (p. 469):
501+ # We can build up a probability distribution like this (p. 469):
496502>>> P = ProbDist()
497503>>> P['sunny'] = 0.7
498504>>> P['rain'] = 0.2
499505>>> P['cloudy'] = 0.08
500506>>> P['snow'] = 0.02
501507
502- ## and query it like this: (Never mind this ELLIPSIS option
503- ## added to make the doctest portable.)
508+ # and query it like this: (Never mind this ELLIPSIS option
509+ # added to make the doctest portable.)
504510>>> P['rain'] #doctest:+ELLIPSIS
5055110.2...
506512
507- ## A Joint Probability Distribution is dealt with like this (Fig. 13.3):
513+ # A Joint Probability Distribution is dealt with like this (Fig. 13.3):
508514>>> P = JointProbDist(['Toothache', 'Cavity', 'Catch'])
509515>>> T, F = True, False
510516>>> P[T, T, T] = 0.108; P[T, T, F] = 0.012; P[F, T, T] = 0.072; P[F, T, F] = 0.008
@@ -513,7 +519,7 @@ def particle_filtering(e, N, dbn):
513519>>> P[T, T, T]
5145200.108
515521
516- ## Ask for P(Cavity|Toothache=T)
522+ # Ask for P(Cavity|Toothache=T)
517523>>> PC = enumerate_joint_ask('Cavity', {'Toothache': T}, P)
518524>>> PC.show_approx()
519525'False: 0.4, True: 0.6'
0 commit comments