in pplbench/ppls/jags/noisy_or_topic.py [0:0]
def get_code(self) -> str:
code = "model {\n"
# generate the node probabilities
code += " prob[1] <- 1\n" # leak node
for node in 1 + np.arange(self.num_topics + self.num_words):
# note that JAGS has 1-based arrays so we have to add one
code += f" prob[{node+1}] <- 1 - exp(-("
for par, wt in enumerate(self.edge_weight[node, :]):
if wt:
code += f"active[{par+1}]*{wt} + "
code += "0))\n"
# generate the topic nodes
code += " active[1] <- 1\n" # leak node
for node in 1 + np.arange(self.num_topics):
code += f" active[{node+1}] ~ dbern(prob[{node+1}])\n"
# generate the word nodes
for node in 1 + self.num_topics + np.arange(self.num_words):
code += f" S[{node-self.num_topics}] ~ dbern(prob[{node+1}])\n"
code += "}"
LOGGER.debug(code)
return code