def ite(f, g, h):
    r"""BDD if-then-else (ITE) operator

    The *f*, *g*, and *h* arguments are BDDs.

    The ITE(f, g, h) operator means
    "if *f* is true, return *g*, else return *h*".

    It is equivalent to:

    * DNF form: ``f & g | ~f & h``
    * CNF form: ``(~f | g) & (f | h)``
    """
    f, g, h = map(BinaryDecisionDiagram.box, (f, g, h))
    return _bdd(_ite(f.node, g.node, h.node))
r"""BDD if-then-else (ITE) operator

    The *f*, *g*, and *h* arguments are BDDs.

    The ITE(f, g, h) operator means
    "if *f* is true, return *g*, else return *h*".

    It is equivalent to:

    * DNF form: ``f & g | ~f & h``
    * CNF form: ``(~f | g) & (f | h)``