If ``B != None``, return the anti-commutator :math:`\{A,B\}`, otherwise
    return the super-operator :math:`\{A,\cdot\}`.  The super-operator
    :math:`\{A,\cdot\}` maps any other operator ``B`` to the anti-commutator
    :math:`\{A, B\} = A B + B A`.

    Args:
        A: The first operator to form all anti-commutators of.
        B: The second operator to form the anti-commutator of, or None.

    Returns:
        SuperOperator: The linear superoperator :math:`[A,\cdot]`

def anti_commutator(A, B=None):
    """If ``B != None``, return the anti-commutator :math:`\{A,B\}`, otherwise
    return the super-operator :math:`\{A,\cdot\}`.  The super-operator
    :math:`\{A,\cdot\}` maps any other operator ``B`` to the anti-commutator
    :math:`\{A, B\} = A B + B A`.

    Args:
        A: The first operator to form all anti-commutators of.
        B: The second operator to form the anti-commutator of, or None.

    Returns:
        SuperOperator: The linear superoperator :math:`[A,\cdot]`

    """
    if B:
        return A * B + B * A
    return SPre(A) + SPost(A)