cbcd.rules¶
Edge orientation rules.
CPDAGRules Protocol + MeekRules R1–R4 for the PC family. PAGRules Protocol + FCIRules R1–R10 for the FCI family.
Classes¶
Base class for protocol classes. |
|
Zhang (2008) R1–R10 applied to fixpoint on a |
|
Meek (1995) R1–R4 applied to fixpoint on a PartialCPDAG. |
|
Base class for protocol classes. |
Module Contents¶
- class cbcd.rules.CPDAGRules[source]¶
Bases:
ProtocolBase class for protocol classes.
Protocol classes are defined as:
class Proto(Protocol): def meth(self) -> int: ...
Such classes are primarily used with static type checkers that recognize structural subtyping (static duck-typing).
For example:
class C: def meth(self) -> int: return 0 def func(x: Proto) -> int: return x.meth() func(C()) # Passes static type check
See PEP 544 for details. Protocol classes decorated with @typing.runtime_checkable act as simple-minded runtime protocols that check only the presence of given attributes, ignoring their type signatures. Protocol classes can be generic, they are defined as:
class GenProto[T](Protocol): def meth(self) -> T: ...
- class cbcd.rules.FCIRules(*, rules: frozenset[str] | None = None)[source]¶
Zhang (2008) R1–R10 applied to fixpoint on a
PartialPAG.R1–R3: simple endpoint propagations. R4: discriminating-path rule (uses
PartialPAG.sepsets). R5–R7: undirected-edge / circle-path rules (selection-bias-aware). R8: composition of mediator chains. R9–R10: uncovered potentially-directed paths (completeness rules).Subset via
rules=; all rules listed in the set are applied, everything else skipped.- rules¶
- class cbcd.rules.MeekRules(*, rules: frozenset[Literal['R1', 'R2', 'R3', 'R4']] | None = None)[source]¶
Meek (1995) R1–R4 applied to fixpoint on a PartialCPDAG.
No ancestor queries are issued — the rules are local pattern matches over triples / quadruples (audit pitfall #6).
Background knowledge constraints:
forbidden_directed(u, v): if a rule would orient u → v, suppress it.required_directed(u, v): pre-orient u → v before running rules.
- rules¶
- class cbcd.rules.PAGRules[source]¶
Bases:
ProtocolBase class for protocol classes.
Protocol classes are defined as:
class Proto(Protocol): def meth(self) -> int: ...
Such classes are primarily used with static type checkers that recognize structural subtyping (static duck-typing).
For example:
class C: def meth(self) -> int: return 0 def func(x: Proto) -> int: return x.meth() func(C()) # Passes static type check
See PEP 544 for details. Protocol classes decorated with @typing.runtime_checkable act as simple-minded runtime protocols that check only the presence of given attributes, ignoring their type signatures. Protocol classes can be generic, they are defined as:
class GenProto[T](Protocol): def meth(self) -> T: ...