code: def test_params(model_test, data):
      gen = Gen(model_test, data, LogSemiring)
      _, struct, vals, _, _ = (
          gen.model,
          gen.struct,
          gen.vals,
          gen.N,
          gen.batch,
      )
  
      if isinstance(vals, tuple):
          vals = tuple((v.requires_grad_(True) for v in vals))
      else:
          vals.requires_grad_(True)
      alpha = struct.sum(vals)
      alpha.sum().backward()
  
imports: from torch_struct import CKY, CKY_CRF, DepTree, LinearChain, SemiMarkov, Alignment, deptree_nonproj, deptree_part
  from torch_struct import LogSemiring, CheckpointSemiring, CheckpointShardSemiring, KMaxSemiring, SparseMaxSemiring, MaxSemiring, StdSemiring, EntropySemiring
  from .extensions import LinearChainTest, SemiMarkovTest, DepTreeTest, CKYTest, CKY_CRFTest, test_lookup
  import torch
  from hypothesis import given
  from hypothesis.strategies import integers, data, sampled_from
  import pytest
  from hypothesis import settings
label_desc: Use image node_id 12 for calling a global function with example usage: test_params(model_test, data) without return types