from ergodic import DomainKnowledge, admg, dag

# 1. A hidden common cause, and no direct effect either way.
knowledge = (
    DomainKnowledge()
    .confound("rain", "traffic")
    .forbid("rain", "traffic")
    .forbid("traffic", "rain")
)
print(knowledge.conflicts())
print(knowledge.violations(admg(["rain <-> traffic"])))
print(knowledge.violations(dag(["rain -> traffic"])))

# 2. An adjacency ban rules out the hidden cause too.
banned = DomainKnowledge().confound("rain", "traffic").forbid_adjacency("rain", "traffic")
print(banned.conflicts())

# 3. Soft statements are for decoding; hard() drops them for a search.
mixed_knowledge = DomainKnowledge().require("rain", "traffic").root("rain", confidence=0.9)
print(mixed_knowledge)
print(mixed_knowledge.hard())
