code: def test_hash_and_eq_params(self):
      wp1 = ParamsType(
          a=Generic(),
          array=TensorType("int64", shape=(None,)),
          floatting=ScalarType("float64"),
          npy_scalar=TensorType("float64", shape=tuple()),
      )
      wp2 = ParamsType(
          a=Generic(),
          array=TensorType("int64", shape=(None,)),
          floatting=ScalarType("float64"),
          npy_scalar=TensorType("float64", shape=tuple()),
      )
      w1 = Params(
          wp1,
          a=1,
          array=np.asarray([1, 2, 4, 5, 7]),
          floatting=-4.5,
          npy_scalar=np.asarray(12),
      )
      w2 = Params(
          wp2,
          a=1,
          array=np.asarray([1, 2, 4, 5, 7]),
          floatting=-4.5,
          npy_scalar=np.asarray(12),
      )
      assert w1 == w2
      assert not (w1 != w2)
      assert hash(w1) == hash(w2)
      # Changing attributes names only (a -> other_name).
      wp2_other = ParamsType(
          other_name=Generic(),
          array=TensorType("int64", shape=(None,)),
          floatting=ScalarType("float64"),
          npy_scalar=TensorType("float64", shape=tuple()),
      )
      w2 = Params(
          wp2_other,
          other_name=1,
          array=np.asarray([1, 2, 4, 5, 7]),
          floatting=-4.5,
          npy_scalar=np.asarray(12),
      )
      assert w1 != w2
      # Changing attributes values only (now a=2).
      w2 = Params(
          wp2,
          a=2,
          array=np.asarray([1, 2, 4, 5, 7]),
          floatting=-4.5,
          npy_scalar=np.asarray(12),
      )
      assert w1 != w2
      # Changing NumPy array values (5 -> -5).
      w2 = Params(
          wp2,
          a=1,
          array=np.asarray([1, 2, 4, -5, 7]),
          floatting=-4.5,
          npy_scalar=np.asarray(12),
      )
      assert w1 != w2
  
imports: import numpy
  import pytest
  import pytensor
  from pytensor import tensor
  from pytensor.graph.basic import Apply
  from pytensor.link.c.op import COp, ExternalCOp
  from pytensor.link.c.params_type import Params, ParamsType
  from pytensor.link.c.type import EnumList, Generic
  from pytensor.scalar import ScalarType
  from pytensor.tensor.type import TensorType, matrix
  from tests import unittest_tools
label_desc: Use image node_id 1 for calling the TestParamsType obj's underlying member method code with example usage: obj.test_hash_and_eq_params() without return types