def getArgs(argv): try: opts, args = getopt.getopt(sys.argv[1:], 'm:j:p:g:') except getopt.GetoptError as err: print str(err) sys.exit(2) output = None operation = None p_output = None val = None for o,a in opts: if o in ("-j"): operation = o output = a elif o == ("-m"): operation = o output = a elif o == ("-g"): operation = o output = a elif o == ("-p"): operation = o p_output = a[0] val = float(a[1:]) output = a[0] else: assert False, "unhandled option" pollution_val = .9 smoker_val = .3 if(p_output == "S"): bn = BayesNode.create_bayesNet(pollution_val, val) elif(p_output == "P"): bn = BayesNode.create_bayesNet(val, smoker_val) else: bn = BayesNode.create_bayesNet(pollution_val, smoker_val) #call functions for math if operation == "-m": if output == "p": print(bn.nodes["Pollution"].marginal) elif output == "~p": print(1.0 - bn.nodes["Pollution"].marginal) elif output == "P": print("True:/n") print(bn.nodes["Pollution"].marginal) print("/nFalse: ") print(1.0 - bn.nodes["Pollution"].marginal) elif output == "s": print(bn.nodes["Smoker"].marginal) elif output == "~s": print(1.0 - bn.nodes["Smoker"].marginal) elif output == "S": print("True:") print(bn.nodes["Smoker"].marginal) print("False: ") print(1.0 - bn.nodes["Smoker"].marginal) elif output == "c": print(bn.nodes["Cancer"].marginal) elif output == "~c": print(1.0 - bn.nodes["Cancer"].marginal) elif output == "C": print("True:") print(bn.nodes["Cancer"].marginal) print("False: ") print(1.0 - bn.nodes["Cancer"].marginal) elif output == "d": print(bn.nodes["Dyspnoea"].marginal) elif output == "~d": print(1.0 - bn.nodes["Dyspnoea"].marginal) elif output == "D": print("True:") print(bn.nodes["Dyspnoea"].marginal) print("False: ") print(1.0 - bn.nodes["Dyspnoea"].marginal) elif output == "x": print(bn.nodes["XRay"].marginal) elif output == "~x": print(1.0 - bn.nodes["XRay"].marginal) elif output == "X": print("True:") print(bn.nodes["XRay"].marginal) print("False: ") print(1.0 - bn.nodes["XRay"].marginal) else: print("Not a valid option") sys.exit(2) elif operation == "-j": if output == "PSC": print ProbabilityCalcs.joint_PSC(bn.nodes["Cancer"], bn.nodes["Pollution"], bn.nodes["Smoker"]) else: wanted = output print ProbabilityCalcs.joint_psc(bn.nodes["Cancer"], bn.nodes["Pollution"], bn.nodes["Smoker"], wanted) elif operation == "-g": #P=H row if output == "p|d": x = ProbabilityCalcs.probPollutionGivenDys(bn.nodes["Cancer"], bn.nodes["Pollution"], bn.nodes["Smoker"],bn.nodes["Dyspnoea"]) print(x) elif output == "p|c": x = ProbabilityCalcs.probPollutionGivenCancer(bn.nodes["Cancer"], bn.nodes["XRay"], bn.nodes["Pollution"], bn.nodes["Smoker"]) print(x) elif output == "p|s": print(1.0 - bn.nodes["Pollution"].marginal) elif output == "p|cs" : x = ProbabilityCalcs.probPollutionGivenCancerAndSmoker(bn.nodes["Cancer"], bn.nodes["XRay"], bn.nodes["Pollution"], bn.nodes["Smoker"]) print(x) elif output == "p|ds" : x = ProbabilityCalcs.probPollutionGivenDysAndSmoker(bn.nodes["Cancer"], bn.nodes["Pollution"], bn.nodes["Smoker"],bn.nodes["Dyspnoea"]) print(x) #S=T row elif output == "s|d": x = ProbabilityCalcs.probSmokerGivenDyspnoea(bn.nodes["Cancer"],bn.nodes["XRay"],bn.nodes["Pollution"], bn.nodes["Smoker"],bn.nodes["Dyspnoea"]) print(x) elif output == "s|s" or output == "s|cs" or output == "s|sc": print("1.0") elif output == "s|c": x = ProbabilityCalcs.probSmokerGivenCancer(bn.nodes["Cancer"],bn.nodes["Pollution"],bn.nodes["Smoker"]) print(x) #C=T row elif output == "c|d": x = ProbabilityCalcs.probCancerGivenDyspnoea(bn.nodes["Cancer"], bn.nodes["Dyspnoea"]) print(x) elif output == "c|s": x = ProbabilityCalcs.probCancerGivenSmoker(bn.nodes["Cancer"], bn.nodes["Pollution"], bn.nodes["Smoker"]) print(x) elif output == "c|c": print("1.0") elif output == "c|ds": x = ProbabilityCalcs.probCancerGivenDysAndSmoker(bn.nodes["Cancer"], bn.nodes["Pollution"], bn.nodes["Smoker"],bn.nodes["Dyspnoea"]) print(x) #not required elif output == "c|p": x = ProbabilityCalcs.probCancerGivenPollutionHigh(bn.nodes["Cancer"], bn.nodes["XRay"], bn.nodes["Pollution"], bn.nodes["Smoker"]) print(x) #X=T row elif output == "x|d": x = ProbabilityCalcs.probXrayGivenDys(bn.nodes["Cancer"], bn.nodes["XRay"], bn.nodes["Dyspnoea"]) print(x) elif output == "x|s": x = ProbabilityCalcs.probXrayGivenSmoker(bn.nodes["Cancer"], bn.nodes["XRay"], bn.nodes["Pollution"], bn.nodes["Smoker"]) print(x) elif output == "x|c" or output == "x|sc" or output == "x|cs": print(bn.nodes["XRay"].probabilities["C"]) elif output == "x|ds": x = ProbabilityCalcs.probXrayGivenDysandSmoker(bn.nodes["Smoker"], bn.nodes["Cancer"], bn.nodes["Pollution"], bn.nodes["Dyspnoea"], bn.nodes["XRay"]) print(x) #D=T row elif output == "d|d": print("1.0") elif output == "d|s": x = ProbabilityCalcs.probDyspnoeaGivenSmoker(bn.nodes["Cancer"], bn.nodes["XRay"], bn.nodes["Pollution"], bn.nodes["Smoker"],bn.nodes["Dyspnoea"]) print(x) elif output == "d|c" or "d|cs": x = ProbabilityCalcs.probDyspnoeaGivenCancer(bn.nodes["Cancer"], bn.nodes["Pollution"], bn.nodes["Smoker"],bn.nodes["Dyspnoea"]) print(x) #not required elif output == "d|p": x = ProbabilityCalcs.probDyspnoeaGivenPollution(bn.nodes["Cancer"], bn.nodes["Pollution"], bn.nodes["Smoker"],bn.nodes["Dyspnoea"]) print(x)