class_docstr: Base class for hierarchical latent variable models.
  
  We assume that the model is of the form
  
  z_{steps-1} -> z_{steps-2} -> ... -> z_0 -> data,
  
  where
  
  1) all variables have the same dims [batch-size, channels, height, width],
  2) p(z_{step}|z_{step+1}), q(z_{step}|z_{step+1}, data), q(z_{steps-1}|data)
      are Gaussians with diagonal covariance matrix,
  3) p(z_{steps-1}) is a standard normal.
  
  Args:
      steps: The number of steps/hierarchchies.
class_docstr_tok: ["Base","class","for","hierarchical","latent","variable","models",".","We","assume","that","the","model","is","of","the","form","z_","{","steps-1","}","-",">","z_","{","steps-2","}","-",">","...","-",">","z_0","-",">","data",",","where","1",")","all","variables","have","the","same","dims","[","batch-size",",","channels",",","height",",","width","]",",","2",")","p","(","z_","{","step","}","|z_","{","step+1","}",")",",","q","(","z_","{","step","}","|z_","{","step+1","}",",","data",")",",","q","(","z_","{","steps-1","}","|data",")","are","Gaussians","with","diagonal","covariance","matrix",",","3",")","p","(","z_","{","steps-1","}",")","is","a","standard","normal",".","Args",":","steps",":","The","number","of","steps\/hierarchchies","."]
code: def __init__(self, steps: int):
      self.steps = steps
  
imports: from abc import ABC, abstractmethod
  from typing import List, NamedTuple, Optional, Tuple, Union, overload
  import craystack
  import numpy
  import torch
  from craystack import codecs
  from craystack.bb_ans import BBANS
  from improved_diffusion.gaussian_diffusion import GaussianDiffusion
label_desc: Use image node_id 1 to create a new BaseHLVModel object from inherited base classes: ABC with example: obj = BaseHLVModel(steps)