code: def test_pytorch_wrapper(nN, nI, nO):
      import torch.nn
  
      model = PyTorchWrapper(torch.nn.Linear(nI, nO)).initialize()
      sgd = SGD(0.001)
      X = numpy.zeros((nN, nI), dtype="f")
      X += numpy.random.uniform(size=X.size).reshape(X.shape)
      Y = numpy.zeros((nN, nO), dtype="f")
      Yh, get_dX = model.begin_update(X)
      assert isinstance(Yh, numpy.ndarray)
      assert Yh.shape == (nN, nO)
      dYh = (Yh - Y) / Yh.shape[0]
      dX = get_dX(dYh)
      model.finish_update(sgd)
      assert dX.shape == (nN, nI)
      check_learns_zero_output(model, sgd, X, Y)
      assert isinstance(model.predict(X), numpy.ndarray)
  
file_path: thinc/thinc/tests/layers/test_pytorch_wrapper.py
imports: import numpy
  import pytest
  from thinc.api import SGD, ArgsKwargs, CupyOps, Linear, MPSOps, NumpyOps, PyTorchWrapper, PyTorchWrapper_v2, PyTorchWrapper_v3, Relu, chain, get_current_ops, torch2xp, use_ops, xp2torch
  from thinc.backends import context_pools
  from thinc.compat import has_cupy_gpu, has_torch, has_torch_amp, has_torch_mps_gpu
  from thinc.layers.pytorchwrapper import PyTorchWrapper_v3
  from thinc.shims.pytorch import default_deserialize_torch_model, default_serialize_torch_model
  from thinc.shims.pytorch_grad_scaler import PyTorchGradScaler
  from thinc.util import get_torch_default_device
  from ..util import check_input_converters, make_tempdir
label_desc: Use image node_id 3 for calling a global function with example usage: test_pytorch_wrapper(nN, nI, nO) without return types