code: def find_measurable_check_and_raise(
      fgraph, node
  ) -> Optional[List[MeasurableCheckAndRaise]]:
      r"""Finds `AssertOp`\s for which a `logprob` can be computed."""
  
      if isinstance(node.op, MeasurableCheckAndRaise):
          return None  # pragma: no cover
  
      rv_map_feature: Optional[PreserveRVMappings] = getattr(
          fgraph, "preserve_rv_mappings", None
      )
  
      if rv_map_feature is None:
          return None  # pragma: no cover
  
      base_rv, *conds = node.inputs
      if not rv_map_feature.request_measurable([base_rv]):
          return None
  
      op = node.op
      new_op = MeasurableCheckAndRaise(exc_type=op.exc_type, msg=op.msg)
      new_rv = new_op.make_node(base_rv, *conds).default_output()
  
      return [new_rv]
  
file_path: pymc/pymc/logprob/checks.py
imports: from typing import List, Optional
  import pytensor.tensor
  from pytensor.graph.rewriting.basic import node_rewriter
  from pytensor.raise_op import CheckAndRaise
  from pytensor.tensor.shape import SpecifyShape
  from pymc.logprob.abstract import MeasurableVariable, _logprob, _logprob_helper
  from pymc.logprob.rewriting import PreserveRVMappings, measurable_ir_rewrites_db
  from pymc.logprob.utils import replace_rvs_by_values
label_desc: Use image node_id 4 for calling a global function with example usage: find_measurable_check_and_raise(fgraph, node) and returns: list, None, None, None