code: def get_quad_rule(num_quad, prototype_tensor):
      r"""
      Get quadrature points and corresponding log weights for a Gauss Hermite quadrature rule
      with the specified number of quadrature points.
  
      Example usage::
  
          quad_points, log_weights = get_quad_rule(32, prototype_tensor)
          # transform to N(0, 4.0) Normal distribution
          quad_points *= 4.0
          # compute variance integral in log-space using logsumexp and exponentiate
          variance = torch.logsumexp(quad_points.pow(2.0).log() + log_weights, axis=0).exp()
          assert (variance - 16.0).abs().item() < 1.0e-6
  
      :param int num_quad: number of quadrature points.
      :param torch.Tensor prototype_tensor: used to determine `dtype` and `device` of returned tensors.
      :return: tuple of `torch.Tensor`s of the form `(quad_points, log_weights)`
      """
      quad_rule = hermgauss(num_quad)
      quad_points = quad_rule[0] * np.sqrt(2.0)
      log_weights = np.log(quad_rule[1]) - 0.5 * np.log(np.pi)
      return torch.from_numpy(quad_points).type_as(
          prototype_tensor
      ), torch.from_numpy(log_weights).type_as(prototype_tensor)
  
file_path: pyro/pyro/ops/special.py
imports: import functools
  import math
  import operator
  import weakref
  from typing import Dict
  import numpy
  import torch
  from numpy.polynomial.hermite import hermgauss
label_desc: Use image node_id 5 for calling a global function with example usage: get_quad_rule(num_quad, prototype_tensor) and returns: torch,  torch