cbcd.rules

Edge orientation rules.

CPDAGRules Protocol + MeekRules R1–R4 for the PC family. PAGRules Protocol + FCIRules R1–R10 for the FCI family.

Classes

CPDAGRules

Base class for protocol classes.

FCIRules

Zhang (2008) R1–R10 applied to fixpoint on a PartialPAG.

MeekRules

Meek (1995) R1–R4 applied to fixpoint on a PartialCPDAG.

PAGRules

Base class for protocol classes.

Module Contents

class cbcd.rules.CPDAGRules[source]

Bases: Protocol

Base 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: Protocol

Base 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:
        ...