code: def test_gluon_student_t():
      class TestT(HybridBlock):
          def __init__(self, func):
              super(TestT, self).__init__()
              self._func = func
  
          def forward(self, df, loc, scale, *args):
              t_dist = mgp.StudentT(df, loc, scale, validate_args=True)
              return _distribution_method_invoker(
                  t_dist, self._func, *args
              )
  
      shapes = [(), (1,), (2, 3), 6]
  
      # Test log_prob
      for shape, hybridize in itertools.product(shapes, [True, False]):
          loc = np.zeros(shape)
          scale = np.random.uniform(0.5, 1.5, shape)
          df = np.random.uniform(2, 4, shape)
          samples = np.random.uniform(0, 4, size=shape)
          net = TestT("log_prob")
          if hybridize:
              net.hybridize()
          mx_out = net(df, loc, scale, samples).asnumpy()
          np_out = ss.t(
              loc=0, scale=scale.asnumpy(), df=df.asnumpy()
          ).logpdf(samples.asnumpy())
          assert_almost_equal(
              mx_out, np_out, atol=1e-4, rtol=1e-3, use_broadcast=False
          )
  
      # Test `mean`, `var` and `entropy`
      for shape, hybridize in itertools.product(shapes, [False, True]):
          for func in ["mean", "variance", "entropy"]:
              loc = np.zeros(shape)
              scale = np.random.uniform(0.5, 1.5, shape)
              df = np.random.uniform(3, 4, shape)
              net = TestT(func)
              if hybridize:
                  net.hybridize()
              mx_out = net(df, loc, scale).asnumpy()
              ss_f = ss.t(loc=0, scale=scale.asnumpy(), df=df.asnumpy())
              if func == "mean":
                  np_out = ss_f.mean()
              elif func == "variance":
                  np_out = ss_f.var()
              else:
                  np_out = ss_f.entropy()
              assert_almost_equal(
                  mx_out,
                  np_out,
                  atol=1e-4,
                  rtol=1e-3,
                  use_broadcast=False,
              )
  
imports: import mxnet
  import numpy
  from mxnet import np, npx, autograd
  from mxnet import gluon
  import mxnet.gluon.probability
  from mxnet.gluon.probability import StochasticBlock, StochasticSequential
  from mxnet.gluon import HybridBlock
  from mxnet.test_utils import use_np, assert_almost_equal
  from numpy.testing import assert_array_equal
  import pytest
  import scipy.stats
  import scipy.special
  import itertools
  from numbers import Number
label_desc: Use image node_id 18 for calling a global function with example usage: test_gluon_student_t() and returns: _distribution_method_invoker