<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def irreducible_purviews(cm, direction, mechanism, purviews):
 """Return all purviews which are irreducible for the mechanism. Args: cm (np.ndarray):
 An |N x N| connectivity matrix. direction (Direction):
 |CAUSE| or |EFFECT|. purviews (list[tuple[int]]):
 The purviews to check. mechanism (tuple[int]):
 The mechanism in question. Returns: list[tuple[int]]: All purviews in ``purviews`` which are not reducible over ``mechanism``. Raises: ValueError: If ``direction`` is invalid. """

    def reducible(purview):
        """Return ``True`` if purview is trivially reducible."""
        _from, to = direction.order(mechanism, purview)
        return connectivity.block_reducible(cm, _from, to)

    return [purview for purview in purviews if not reducible(purview)]