code: def reshape_Z_dZ(
      zs: Sequence[TensorType], dzs: Sequence[TensorType]
  ) -> Tuple[tf.Tensor, tf.Tensor]:
      """
      :param zs: List with d rank-1 Tensors, with shapes N1, N2, ..., Nd
      :param dzs: List with d rank-1 Tensors, with shapes N1, N2, ..., Nd
      :returns: points Z, Tensor with shape [N1*N2*...*Nd, D],
          and weights dZ, Tensor with shape [N1*N2*...*Nd, 1]
      """
      Z = list_to_flat_grid(zs)
      dZ = tf.reduce_prod(
          list_to_flat_grid(dzs), axis=-1, keepdims=True
      )
      return Z, dZ
  
file_path: GPflow/gpflow/quadrature/gauss_hermite.py
imports: from typing import Sequence, Tuple
  import numpy
  import tensorflow
  from check_shapes import check_shapes, inherit_check_shapes
  from ..base import TensorType
  from ..config import default_float
  from .base import GaussianQuadrature
label_desc: Use image node_id 3 for calling a global function with example usage: reshape_Z_dZ(zs, dzs) and returns: Z,  dZ