class_docstr: Abstract class for the variational auto-encoder. The abstract method
  for training the network is implemented by subclasses.
class_docstr_tok: ["Abstract","class","for","the","variational","auto-encoder",".","The","abstract","method","for","training","the","network","is","implemented","by","subclasses","."]
docstr: Given a batch of data `x`, run it through the trained VAE network to get
  the reconstructed image.
  
  :param x: batch of data or a single datum (MNIST image).
  :return: reconstructed image, and the latent z's mean and variance.
code: def model_eval(self, x):
      """
      Given a batch of data `x`, run it through the trained VAE network to get
      the reconstructed image.
  
      :param x: batch of data or a single datum (MNIST image).
      :return: reconstructed image, and the latent z's mean and variance.
      """
      z_mean, z_var = self.vae_encoder(x)
      if self.mode == TRAIN:
          z = Normal(z_mean, z_var.sqrt()).rsample()
      else:
          z = z_mean
      return self.vae_decoder(z), z_mean, z_var
  
imports: import argparse
  import itertools
  import os
  from abc import ABCMeta, abstractmethod
  import torch
  import torch.nn
  from torch.nn import functional
  from torchvision.utils import save_image
  from utils.mnist_cached import DATA_DIR, RESULTS_DIR
  import pyro
  from pyro.contrib.examples import util
  from pyro.distributions import Bernoulli, Normal
  from pyro.infer import SVI, JitTrace_ELBO, Trace_ELBO
  from pyro.optim import Adam
label_desc: Use image node_id 4 for calling the VAE obj's underlying member method code with example usage: obj.model_eval(x) and returns: self,  z_mean,  z_var