code: def test_qmodule_freeze(in_features, out_features, use_bias, dtype):
      qlinear = QLinear(in_features, out_features, bias=use_bias).to(
          dtype
      )
      assert not qlinear.frozen
      assert not isinstance(qlinear.weight, QTensor)
      assert qlinear.weight.dtype == dtype
      if use_bias:
          assert not isinstance(qlinear.bias, QTensor)
          assert qlinear.bias.dtype == dtype
      qweight = qlinear.qweight()
      assert isinstance(qweight, QTensor)
      assert qweight.dtype == dtype
      assert qweight.itype == torch.int8
      qlinear.freeze()
      assert qlinear.frozen
      assert isinstance(qlinear.weight, QTensor)
      assert qlinear.weight.dtype == dtype
      assert qlinear.weight.itype == torch.int8
      if use_bias:
          assert not isinstance(qlinear.bias, QTensor)
          assert qlinear.bias.dtype == dtype
  
imports: import pytest
  import torch
  from quanto import QTensor
  from quanto.nn import QLinear
label_desc: Use image node_id 1 for calling a global function with example usage: test_qmodule_freeze(in_features, out_features, use_bias, dtype) without return types