code: def test_cop_with_params():
      matrix_assert = Blockwise(
          core_op=assert_op, signature="(x1,x2),()->(x1,x2)"
      )
  
      x = tensor("x", shape=(5, None, None), dtype="float64")
      x_shape = matrix_assert(x, (x >= 0).all())
  
      fn = pytensor.function([x], x_shape)
      [fn_out] = fn.maker.fgraph.outputs
      assert (
          fn_out.owner.op == matrix_assert
      ), "Blockwise should be in final graph"
  
      np.testing.assert_allclose(
          fn(np.zeros((5, 3, 2))),
          np.zeros((5, 3, 2)),
      )
  
      with pytest.raises(AssertionError):
          fn(np.zeros((5, 3, 2)) - 1)
  
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 8 for calling a global function with example usage: test_cop_with_params() without return types