class_docstr: Generalizes a core `Op` to work with batched dimensions.
  
  TODO: Dispatch JAX (should be easy with the vectorize macro)
  TODO: Dispatch Numba
  TODO: C implementation?
  TODO: Fuse Blockwise?
class_docstr_tok: ["Generalizes","a","core","`","Op","`","to","work","with","batched","dimensions",".","TODO",":","Dispatch","JAX","(","should","be","easy","with","the","vectorize","macro",")","TODO",":","Dispatch","Numba","TODO",":","C","implementation","?","TODO",":","Fuse","Blockwise","?"]
code: def _check_runtime_broadcast(self, node, inputs):
      batch_ndim = self.batch_ndim(node)
  
      for dims_and_bcast in zip(
          *[
              zip(
                  input.shape[:batch_ndim],
                  sinput.type.broadcastable[:batch_ndim],
              )
              for input, sinput in zip(inputs, node.inputs)
          ]
      ):
          if (
              any(d != 1 for d, _ in dims_and_bcast)
              and (1, False) in dims_and_bcast
          ):
              raise ValueError(
                  "Runtime broadcasting not allowed. "
                  "At least one input has a distinct batch dimension length of 1, but was not marked as broadcastable.\n"
                  "If broadcasting was intended, use `specify_broadcastable` on the relevant input."
              )
  
imports: from collections.abc import Sequence
  from copy import copy
  from typing import Any, Optional, cast
  import numpy
  from pytensor import config
  from pytensor.gradient import DisconnectedType
  from pytensor.graph.basic import Apply, Constant, Variable
  from pytensor.graph.null_type import NullType
  from pytensor.graph.op import Op
  from pytensor.graph.replace import _vectorize_node, _vectorize_not_needed, vectorize_graph
  from pytensor.scalar import ScalarType
  from pytensor.tensor import as_tensor_variable
  from pytensor.tensor.shape import shape_padleft
  from pytensor.tensor.type import TensorType, continuous_dtypes, discrete_dtypes, tensor
  from pytensor.tensor.utils import _parse_gufunc_signature, broadcast_static_dim_lengths, import_func_from_string
  from pytensor.tensor.variable import TensorVariable
label_desc: Use image node_id 11 for calling the Blockwise obj's underlying member method code with example usage: obj._check_runtime_broadcast(node, inputs) without return types