class_docstr: Base class to test Blockwise works for specific Ops
class_docstr_tok: ["Base","class","to","test","Blockwise","works","for","specific","Ops"]
code: def setup_class(cls):
      seed = sum(map(ord, str(cls.core_op)))
      cls.rng = np.random.default_rng(seed)
      cls.params_sig, cls.outputs_sig = _parse_gufunc_signature(
          cls.signature
      )
      if cls.batcheable_axes is None:
          cls.batcheable_axes = list(range(len(cls.params_sig)))
      batch_shapes = [(), (1,), (5,), (1, 1), (1, 5), (3, 1), (3, 5)]
      cls.test_batch_shapes = list(
          product(batch_shapes, repeat=len(cls.batcheable_axes))
      )
      cls.block_op = Blockwise(
          core_op=cls.core_op, signature=cls.signature
      )
  
imports: import re
  from itertools import product
  from typing import Optional, Union
  import numpy
  import pytest
  import pytensor
  from pytensor import config, function
  from pytensor.compile import get_mode
  from pytensor.gradient import grad
  from pytensor.graph import Apply, Op
  from pytensor.graph.replace import vectorize_node
  from pytensor.raise_op import assert_op
  from pytensor.tensor import diagonal, log, tensor
  from pytensor.tensor.blockwise import Blockwise, vectorize_node_fallback
  from pytensor.tensor.nlinalg import MatrixInverse
  from pytensor.tensor.rewriting.blas import specialize_matmul_to_batched_dot
  from pytensor.tensor.slinalg import Cholesky, Solve, cholesky, solve_triangular
  from pytensor.tensor.utils import _parse_gufunc_signature
label_desc: Use image node_id 1 for calling the BlockwiseOpTester obj's underlying member method code with example usage: obj.setup_class(cls) without return types