code: def test_gauss_hermite_quadrature_1D_normal_nonbatch(
      self, cuda=False
  ):
      func = lambda x: torch.sin(x)
  
      means = torch.randn(10)
      variances = torch.randn(10).abs()
      quadrature = GaussHermiteQuadrature1D()
  
      if cuda:
          means = means.cuda()
          variances = variances.cuda()
          quadrature = quadrature.cuda()
  
      dist = torch.distributions.Normal(means, variances.sqrt())
  
      # Use quadrature
      results = quadrature(func, dist)
  
      # Use Monte-Carlo
      samples = dist.rsample(torch.Size([20000]))
      actual = func(samples).mean(0)
  
      self.assertLess(torch.mean(torch.abs(actual - results)), 0.1)
  
imports: import os
  import random
  import unittest
  import torch
  from linear_operator.operators import DiagLinearOperator
  from gpytorch.distributions import MultivariateNormal
  from gpytorch.test.utils import least_used_cuda_device
  from gpytorch.utils.quadrature import GaussHermiteQuadrature1D
label_desc: Use image node_id 3 for calling the TestQuadrature obj's underlying member method code with example usage: obj.test_gauss_hermite_quadrature_1D_normal_nonbatch(cuda) without return types